繁体   English   中英

从另一个 class 处理 JFrame

[英]Disposing JFrame from another class

如何从另一个 class 处理JFrame 我的代码在下面列出。

public class MainWindow

{

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

处理 class:

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

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

建议

JFrame实例设为MainWindow class 的字段,并为其提供访问器方法。

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 class 中,您应该有一个MainWindow实例,您只需在其中执行以下操作即可处理其JFrame实例:

mainWindowInstance.getMainFrame().dispose();

建议


编辑

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

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

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

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

public class Disposing{
    private MainWindow mainWindowInstance;

    public Disposing(){
        mainWindowInstance = new MainWindow();
        .
        .
        .
    }

    public void diposeMainFrame(){
        mainWindowInstance.getMainFrame().dispose();
    }
}

有一种最简单的方法可以做到这一点。 用于从另一个 ZA2F2ED4F8EBC2CBB64C21A29DZ 处理 class 的 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();
    }
}

如果你想像这样访问它,你需要让 main_f 成为一个 static 变量。

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

  • 使您的 MainWindow 成为 singleton
  • 使您的 main_f 成为您的 MainWindow 的一个字段
  • 调用 MainWindow.getInstance().getFrame().dispose()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM