我做了一个JComboBox
当它的其中一个项目被选中时,它启动了一个JFrame
。不允许同一个JFrame被打开两次或更多
但如果再次选择相同的项目,即使JFrame
已启动,它将再次启动。
我该如何去允许它只能在同一时间打开一次。
谢谢:)
我做了一个JComboBox
当它的其中一个项目被选中时,它启动了一个JFrame
。不允许同一个JFrame被打开两次或更多
但如果再次选择相同的项目,即使JFrame
已启动,它将再次启动。
我该如何去允许它只能在同一时间打开一次。
谢谢:)
我认为你需要使用自定义JDialogs,而不是JFrame的,这将不允许从另一个窗口或对话框的用户输入。有关更多信息和源代码,请参阅Oracle website。
您也可以在一个类中,这将持有事件创建的JFrame的情况下使用一个静态的JFrame变量,但其编码的不是好办法。
//global jframe variable
class Globals{
public static myFrame myFrameOpenedInstance=null;
}
// By invoking the event method returns same instance
method duringEventOccured()
{
if(Globals.myFrameOpenedInstance==null){
myFrame newFrameInstance=new myFrame();
Globals.myFrameOpenedInstance=newFrameInstance;
newFrameInstance.setVisible(true);
}
else{
myFrame newFrameInstance=Globals.myFrameOpenedInstance;
newFrameInstance.setVisible(true);
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Tester extends JFrame {
boolean i = true;
public Tester() {
setVisible(true);
pack();
JComboBox box = new JComboBox();
box.addItem("One");
box.addItem("Two");
box.addItem("Three");
box.addItem("Four");
box.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (i) {
final JFrame s = new JFrame();
s.setVisible(true);
s.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent) {
i = true;
s.setEnabled(false);
}
});
}
else {
System.out.print("\n alredy opende");
}
i = false;
}
});
getContentPane().add(box);
}
public static void main(String[] args) {
Tester tester = new Tester();
}
}
这里面是例如对您有所帮助。我们添加Windows监听器,也布尔变量来识别窗口已经打开没有演示例子。
显示您的代码。设置一个标志/布尔值或检查'JFrame'是否已经可见。 – Brandon
谢谢!我添加了一个条件,如果它不可见以允许它被打开,否则它会显示一个错误。 :) – Boolena