框架可以访问另一个框架的按钮/组件吗?

时间:2013-04-05 19:48:17

标签: java swing jframe awt

我有两个框架,我想点击第2帧中的按钮,禁用第1帧中的按钮。这可能吗?程序从frame1开始执行并打开frame2。它来自这个frame2,我想在第1帧中禁用该按钮但是它不起作用.....怎么能这样做?

附加信息:当我使用面板时,我也有类似的问题。我只是不明白。 Plz帮忙!

以下是程序开始执行的frame1的编码:

public class Frame1 extends javax.swing.JFrame {

Frame2 frm2 = new Frame2();    

public Frame1() {
    initComponents();        
}    

public void buttonDisable(){
    Btn1.setEnabled(false);
}
private void Btn1ActionPerformed(java.awt.event.ActionEvent evt) {                                     
    frm2.setVisible(true);
}                                    

public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            new Frame1().setVisible(true);
        }
    });
}

public javax.swing.JButton Btn1;

}

这是frame2的编码,我要在其中禁用该按钮:

public class Frame2 extends javax.swing.JFrame {

public Frame2() {
    initComponents();
}                       

private void Btn2ActionPerformed(java.awt.event.ActionEvent evt) {                                     
    Frame1 frm1 = new Frame1();
    frm1.buttonDisable();
}                                    

public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            new Frame2().setVisible(true);
        }
    });
}

public javax.swing.JButton Btn2;

}

1 个答案:

答案 0 :(得分:3)

这很简单,你的抽象就可以了。这是实现目标的基本方法:

class FrameTwo extends JFrame {
    private FramOne firstFrame;

    public FrameTwo(FrameOne firstFrame) {
        this.firstFrame = firstFrame;
    };

    public void doSomething() {
        System.out.println(this.firstFrame.someMethod());
    };
};

基本上我将FrameOne类的实例传递给FrameTwo构造函数。有几个选项可以实现这一点,使用静态成员,使用两个框架作为某个类的实例,使用View抽象等。您的问题是简单的OOP,或许可以阅读更多内容。

另请注意,您可以将import javax.swing.Frame添加到文件顶部,然后只需输入class FrameOne extends Frame而不是class FrameOne extends javax.swing.Frame;

最重要

对于同一应用程序使用多个帧非常罕见并且强烈建议不要这样做。我会考虑创建使用JPanel嵌套元素的视图,然后您可以在同一帧内切换面板和对话框。