根据帧是否打开启用和禁用按钮

时间:2012-04-02 20:27:41

标签: java swing jframe jbutton

我有一个打开框架的按钮。有没有办法启用/禁用按钮取决于框架是否打开?

让我们说,如果框架是打开的,我希望按钮为button.enabled(false)。但是一旦框架关闭,我想将其更改为button.enabled(true)

在我按钮的actionPerformed方法中,我这样做

JFrame testFrame = new JFrame();
testFrame.setSize(100,100);
testFrame.setVisible(true);

但是,我不想一次打开多个这样的帧。因此,当单击按钮创建的框架打开时,我希望禁用该按钮直到框架关闭。 (即使框架不可见,我仍然不想允许打开另一个框架)

3 个答案:

答案 0 :(得分:3)

添加一个onClose侦听器,用于在用户(或程序)关闭帧时将按钮设置为启用。同样,添加一行以禁用首先打开框架的调用中的按钮。

答案 1 :(得分:3)

如果你的目的是让按钮只创建一个窗口,我建议不要再禁用启用按钮,你要指向一个JFrame,所以代码中的某个地方有一个类变量:

JFrame myFrame = null;

然后按钮代码应为:

If (myFrame == null) {
    myframe = new JFrame();
    //set up the frame etc
    myFrame.setVisible();
} else {
    myFrame.setVisible();
    //code to bring focus to myFrame
}

说实话,我不太记得将焦点带到窗口的最佳方法,但这里有几个链接:

How to bring a window to the front?
http://coding.derkeiler.com/Archive/Java/comp.lang.java.gui/2006-06/msg00152.html

答案 2 :(得分:3)

您可能不应该从另一个GUI打开作为JFrame的从属窗口。打开一个对话框,比如模态或非模态的JDialog或JOptionPane,你可能会好得多。请理解这两个小动物中的任何一个都可以拥有非常复杂的GUI。例如,请点击此处查看示例:how-do-you-return-a-value-from-a-java-swing-window-closes-from-a-button

此外,如果您的对话框变量是您的类的一个字段,那么它只创建一次,即使显示它的按钮被多次按下,您也不能显示其中两个窗口。

您的代码看起来像......

// testDialog is a JDialog field. and this line is called in 
// the class constructor.
JDialog testDialog = new JDialog(theCurrentJFrame, "Dialog Title", false); // true 
                                                                    // if modal

// this line is called in the button's ActionListener.
testDialog.pack(); // Never set the size of your GUI's. 
                   // Let the layout managers do this for you.
testDialog.setVisible(true);
相关问题