【问题标题】:Java Swing; JFrame Popup爪哇摇摆; JFrame 弹出窗口
【发布时间】:2010-11-04 16:08:34
【问题描述】:

我有一个调用 JFrame 派生类的新实例的 JMenuItem 回调。

每当调用 JMenuItem 回调时,原始弹出窗口都不会回到我的主应用程序的前面。相反,它会创建一个新实例和一个新的弹出窗口(因此有两个或多个相同的派生类)。

我怎样才能让它在任何时候都最多有一个派生类实例?

【问题讨论】:

    标签: java swing jframe


    【解决方案1】:

    如果您的派生类的实例真的不应该超过一个,您可以将其设为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()

    【讨论】:

    • 工作就像一个魅力!多亏了你,我学会了一种新的设计模式:)。非常感谢
    • 我只想提一下,您的代码不是线程安全的,在多线程环境中,您的单例模式很可能会失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多