2014-02-19 40 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

相關問題