如何在Main JFrame中解除后从otherJFrame启用按钮?

时间:2016-05-02 10:42:13

标签: java swing jframe actionlistener

我有两个班级:

public class Screen1 extends javax.swing.JFrame {
...
//disables JButton1 after it is clicked on
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){                                         
      setVisible(false);  
....
}
}

另一堂课:

public class Screen2 extends javax.swing.JFrame {
...
//Clicking on JButton2 is supposed to enable JButton1 (from Screen1) again     
...
}

现在,再次启用JButton1的最简单方法是什么?我没有从Screen1直接访问JButton1再次可见。我已经研究了 ActionListeners Modal JDialogs 这些似乎来自我的Google搜索,就像一些有希望的方法来解决这个问题(可能?)。 但我真的找不到一个我会理解的例子(我更像是一个Java初学者)。

感谢任何有用的输入!

1 个答案:

答案 0 :(得分:1)

请在下面找到这个简单的例子

Screen2默认情况下禁用了JButton,而Screen1包含另一个可以启用第一个按钮的JButton

画面2

public class Screen2 extends JPanel {

    private JButton button;

    public Screen2() {
        button = new JButton("Button");
        button.setEnabled(false); //the button is disabled by default
        this.add(button);// add the button to the screen
    }

    // this method will be used to enable the button
    public void changeButtonStatus(boolean flag) {
        button.setEnabled(flag);
    }
}

屏蔽1

public class Screen1 {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Screen1");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(250, 200);
        frame.setLocationRelativeTo(null);
        JButton button = new JButton("Enable the button");
        Screen2 screen2 = new Screen2();
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                screen2.changeButtonStatus(true); //Call the method that enable the button
            }
        });
        frame.add(screen2, BorderLayout.SOUTH);
        frame.add(button, BorderLayout.NORTH);
        frame.setVisible(true);
    }
}

输出

首先,Screen2 JButton被禁用

enter image description here

点击屏幕1 JButton时,屏幕2 JButton将启用。

enter image description here