【问题标题】:Disposing JFrame from another class从另一个类中处理 JFrame
【发布时间】:2011-08-19 13:33:40
【问题描述】:

我如何处理另一个班级的JFrame?我的代码如下所示。

public class MainWindow

{

JFrame main_f = new JFrame("xx");
main_f.getContentPane().setLayout(new BorderLayout());
main_f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
.
.
.
}

处理类:

public static void DisposingJFrame (){
.
.
.
MainWindow.main_f.dispose();
}

MainWindow.main_f.dispose() 不起作用,因为main_f 不是变量。你能帮帮我吗?

【问题讨论】:

    标签: java swing jframe dispose


    【解决方案1】:

    建议

    使JFrame 实例成为MainWindow 类的字段,并为其提供访问器 方法。

    public final class MainWindow{
        private final JFrame main_f;
    
        public MainWindow(){
            main_f = new JFrame("xx");
            main_f.getContentPane().setLayout(new BorderLayout());
            main_f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            .
            .
            .
        }
    
        public final JFrame getMainFrame(){
            return main_f;
        }
        .
        .
        .
    }
    

    然后在Disposing 类中,您应该有一个MainWindow 实例,您只需在其中执行以下操作即可处置其JFrame 实例:

    mainWindowInstance.getMainFrame().dispose();
    

    推荐


    编辑

    这是为了解决您看到的错误:

    1. 变量 main_f 可能尚未初始化
    2. 找不到符号“mainWindowInstance”

    关于第一个错误,这是因为在我提供的示例中,我使用了final 修饰符。此字段必须在对象创建时初始化。因此,您必须拥有多个构造函数。要解决此问题,请删除 final 修饰符,或在 MainWindow 的每个构造函数中初始化 main_f 字段。

    关于第二个错误,mainWindowInstance 是我留给 来创建的。这是一个“例如”-

    public class Disposing{
        private MainWindow mainWindowInstance;
    
        public Disposing(){
            mainWindowInstance = new MainWindow();
            .
            .
            .
        }
    
        public void diposeMainFrame(){
            mainWindowInstance.getMainFrame().dispose();
        }
    }
    

    【讨论】:

    • @Makaroni,另外,如果您将 main_f 设为 static 字段,这将按照您尝试处理它的方式工作,但这并不是真正的 OOP。
    • IDE 现在给了我 2 个错误:第一个。 “变量 main_f 可能尚未初始化”,第二个:找不到符号“mainWindowInstance”。我应该导入一些东西吗?
    • @Makaroni,什么错误?你能包括你更新的代码吗?请提供此信息作为对您问题的修改。
    【解决方案2】:

    如果你想像这样访问它,你需要将 main_f 设为一个静态变量。

    但是,这是非对象模式。取而代之的是,这样做:

    • 让您的 MainWindow 成为单例
    • 将 main_f 设为 MainWindow 的字段
    • 调用 MainWindow.getInstance().getFrame().dispose()

    另一种方法是将 MainWindow 的实例提供给 DisposingJFrame(这样,您不需要将 MainFrame 声明为单例)

    【讨论】:

      【解决方案3】:

      有一种最简单的方法可以做到这一点。从另一个类中释放一个类的 JFrame 的 Java 代码如下:

      public class Main extends JFrame
      {
        Main()
        {
          Main x=new Main();
          Other.a=x;
        }
      }
      
      public class Other extends JFrame
      {
         static Main a;
      
         Other()
         {  
            a.dispose();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多