2014-02-19 45 views
0

我做了一个JComboBox当它的其中一个项目被选中时,它启动了一个JFrame不允许同一个JFrame被打开两次或更多

但如果再次选择相同的项目,即使JFrame已启动,它将再次启动。

我该如何去允许它只能在同一时间打开一次。

谢谢:)

+1

显示您的代码。设置一个标志/布尔值或检查'JFrame'是否已经可见。 – Brandon

+0

谢谢!我添加了一个条件,如果它不可见以允许它被打开,否则它会显示一个错误。 :) – Boolena

回答

0

我认为你需要使用自定义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); 
    } 

} 
0
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监听器,也布尔变量来识别窗口已经打开没有演示例子。 enter image description here

相关问题