[英]How do you send call to main class from a class file?
嗨,我有1个主程序文件与2个类文件有关。 在主类文件中,我创建一个框架并控制它们之间的交互方式。 我的一个班级文件需要与主班级文件对话以更改第3个文件。 我正在尝试找出该电话将如何发送回去。
主类文件:
public class MainFrame extends javax.swing.JFrame {
public MainFrame() {
buttonPanel1 = new ButtonPanel();
textPanel1 = new TextPanel();
textPanel2 = new TextPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(buttonPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(textPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(textPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(buttonPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(textPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(textPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
);
pack();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(() -> {
new MainFrame().setVisible(true);
});
}
public void copyText() {
textPanel2.setText(textPanel1.getText());
}
private ButtonPanel buttonPanel1;
private TextPanel textPanel1;
private TextPanel textPanel2;
}
试图回调到主文件的按钮类文件。 更改第三个文件。
public class ButtonPanel extends javax.swing.JPanel {
public ButtonPanel() {
jButton1 = new javax.swing.JButton();
jButton1.setText("Change");
jButton1.addActionListener((java.awt.event.ActionEvent evt) -> {
//I would like to tell Main Frame to get TextPanel1 and put into TextPanel2
MainFrame.copyText();
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup().addComponent(jButton1))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup().addComponent(jButton1))
);
}
private javax.swing.JButton jButton1;
}
并且正在更改:
public class TextPanel extends javax.swing.JPanel {
public TextPanel() {
jTextField1 = new javax.swing.JTextField();
jTextField1.setText("Hello");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 59, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
);
}
public String getText(){
return jTextField1.getText();
}
public void setText(String str){
jTextField1.setText(str);
}
private javax.swing.JTextField jTextField1;
}
如果将方法设为静态,则可以使用该方法,但是您将无法直接访问该对象。
MainFrame.copyText();
否则,只需将对mainFrame的引用传递给ButtonPanel。 例如:
public ButtonPanel(MainFrame mainFrame) {
this.mainFrame = mainFrame;
...
}
并在大型机上这样创建:
new ButtonPanel(this);
签出MVC(模型-视图-控制器)范例以分离事物,并进行一些概述。
一个控制器负责所有事情:它保留数据模型和GUI 视图 。 事件,对模型的更改将传递到控制器,然后调用视图上的方法。
Controller类(如Application
)只有一个实例,并且是一些通用类,具有Application.get().copyText()
类的方法,并具有View( MainFrame
)和Model(data,String)。
public class Application { // The controller
private static final Application instance = new Application();
private MainFrame frame;
public static Application get() {
return instance;
}
public static void main(String[] args) {
...
然后在Application.copyText中可能会调用MainFrame方法。 有点乒乓球。 但是将业务逻辑(控制流)保留在冗长的GUI代码之外。
其他技术是为按钮设置单独的Action类,以扩展AbstractAction。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.