2012-08-14 67 views
1

我正在使用不同的類:一個擁有一個按鈕的主JFrame,一個擁有一個新的JFrame,在按下按鈕時被調用。按鈕多次打開新的JFrame。我該如何阻止?

if(event.getSource() == noteBtn) { MiniPad.pad(); return;} 

(MiniPad.pad()參考的新的JFrame類和墊()方法)

當我的removeAll()上承載按鈕,然後重新驗證(JPanel中)和重繪(),該按鈕會多次打開JFrame,這不是我想要的。

有沒有辦法告訴你不能有JFrame的多個副本開放在任何一個時間的MiniPad類?順便擴展JFrame,以防萬一。

+0

你怎麼會知道的框架被關閉?如果您正在等待它關閉,則可以使用布爾值來指示幀是否打開。 – elyashiv 2012-08-14 11:21:21

+1

這個[示例](http://stackoverflow.com/a/9443609/1057230)可以給你一些想法,但不要使用兩個'JFrame',而是堅持一個'JFrame多個JDialog'東西由@AndrewThompson提供建議:-) – 2012-08-14 11:56:58

回答

4

編輯:下面的所有內容都是有效的編程知識,但是您可能還想考慮讓MiniPad擴展JDialog類。我以前沒有用過它,但它的實現看起來很像JFrame。您的MiniPad課程實際上可能不需要改動太多。文檔在這裏:http://docs.oracle.com/javase/7/docs/api/javax/swing/JDialog.html

如果你想知道爲什麼,看看安德魯湯普森的帖子here

-

從我明白你的問題,MiniPad延伸JFramepad()方法創建MiniPad類的新實例。最簡單的解決方案是將MiniPad類(至少通過pad()方法)轉換爲單例。單例是一種在任何給定時間只能存在一個實例(或對象)的類。通過調用靜態方法(在本例中爲pad()),檢查對象的實例是否已經存在;如果是這樣,只需使用該現有對象:

public class MiniPad extends JFrame { 

    //whatever code you have 

    private static MiniPad padInstance = null; //the singleton instance of your MiniPad 

    public static MiniPad pad() { 
     if(padInstance == null) 
      padInstance = new MiniPad(); 
     //If you want to reset the object every time you call the method for whatever reason, do it here 
     pad.setVisible(true); // I believe this is all you want to do 
    } 
} 

這應該做你想做的。通過調用pad()方法,只有一個MiniPad會出現。

不過,如果我讀了你的問題錯了,讓我知道,我將修改我的答案。對單身

信息: http://en.wikipedia.org/wiki/Singleton_pattern

+3

請你閱讀頂部海報之一的建議,然後再次[使用多個JFrames,好/壞實踐?](http://stackoverflow.com/a/9554657/714968) – mKorbel 2012-08-14 11:45:38

+0

完美的答案,出色的工作。非常感謝! :-) – lukatar 2012-08-14 12:04:37