2010-11-04 151 views
4

我有一個JMenuItem回調,它調用JFrame派生類的新實例。Java Swing; JFrame Popup

每當調用JMenuItem回調函數時,原始彈出窗口都不會回到主應用程序的前面。相反,它創建一個新的實例和一個新的窗口彈出窗口(所以有兩個或更多相同的派生類)。

我該怎麼做,所以最多隻有一個派生類實例?

回答

4

如果真的不應該有多於一個派生類的實例,那麼可以將其設置爲Singleton,例如,

public class MyFrame extends JFrame { 
    private static MyFrame instance = null; 
    private MyFrame() { 
     // Private to prevent instantiation. 
    } 

    public static MyFrame getInstance() { 
     if(instance == null) { 
     instance = new MyFrame(); 
     } 
     return instance; 
    } 
} 

您只需撥打MyFrame.getInstance()當你需要獲得一個實例,而不是使用新的,每一次都會得到相同的一個(將要創建的第一次)。例如

JFrame myFrame = MyFrame.getInstance(); 
// now call methods upon myFrame to make it pop up, etc. 

如果你從一個以上的地方這樣做,那麼它很可能是有意義的創建MyFrame進一步的靜態方法,然後將代碼在那裏。例如

public static void popUp() { 
    JFrame myFrame = getInstance(); 
    // now call methods upon myFrame to make it pop up, etc. 
} 

然後你可以簡單地打電話給MyFrame.popUp()

+0

工作就像一個魅力!我學習了一個新的設計模式感謝你:)。 mucho讚賞 – 2010-11-04 17:05:47

+0

很高興聽到它的幫助:) – William 2010-11-04 17:06:35

+0

我只想提一下,你的代碼是不是線程安全的,這是它在多線程環境中很可能是你的Singleton模式會失敗。 – 2012-10-16 20:02:20