【发布时间】:2010-11-04 16:08:34
【问题描述】:
我有一个调用 JFrame 派生类的新实例的 JMenuItem 回调。
每当调用 JMenuItem 回调时,原始弹出窗口都不会回到我的主应用程序的前面。相反,它会创建一个新实例和一个新的弹出窗口(因此有两个或多个相同的派生类)。
我怎样才能让它在任何时候都最多有一个派生类实例?
【问题讨论】:
我有一个调用 JFrame 派生类的新实例的 JMenuItem 回调。
每当调用 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;
}
}
当您需要获取实例而不是使用 new 时,您只需调用 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()。
【讨论】: