我有一个打开框架的按钮。有没有办法启用/禁用按钮取决于框架是否打开?
让我们说,如果框架是打开的,我希望按钮为button.enabled(false)
。但是一旦框架关闭,我想将其更改为button.enabled(true)
。
在我按钮的actionPerformed方法中,我这样做
JFrame testFrame = new JFrame();
testFrame.setSize(100,100);
testFrame.setVisible(true);
但是,我不想一次打开多个这样的帧。因此,当单击按钮创建的框架打开时,我希望禁用该按钮直到框架关闭。 (即使框架不可见,我仍然不想允许打开另一个框架)
答案 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);