4
我有一個JMenuItem回調,它調用JFrame派生類的新實例。Java Swing; JFrame Popup
每當調用JMenuItem回調函數時,原始彈出窗口都不會回到主應用程序的前面。相反,它創建一個新的實例和一個新的窗口彈出窗口(所以有兩個或更多相同的派生類)。
我該怎麼做,所以最多隻有一個派生類實例?
我有一個JMenuItem回調,它調用JFrame派生類的新實例。Java Swing; JFrame Popup
每當調用JMenuItem回調函數時,原始彈出窗口都不會回到主應用程序的前面。相反,它創建一個新的實例和一個新的窗口彈出窗口(所以有兩個或更多相同的派生類)。
我該怎麼做,所以最多隻有一個派生類實例?
如果真的不應該有多於一個派生類的實例,那麼可以將其設置爲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()
。
工作就像一個魅力!我學習了一個新的設計模式感謝你:)。 mucho讚賞 – 2010-11-04 17:05:47
很高興聽到它的幫助:) – William 2010-11-04 17:06:35
我只想提一下,你的代碼是不是線程安全的,這是它在多線程環境中很可能是你的Singleton模式會失敗。 – 2012-10-16 20:02:20