2

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

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

这是程序开始执行的 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;

}
4

1 回答 1

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;

最重要的

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

于 2013-04-05T19:56:37.327 回答