繁体   English   中英

如何从课程文件向主班发送呼叫?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM