从另一个类处理JFrame

时间:2011-08-19 13:33:40

标签: java swing jframe dispose

如何从另一个班级处置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不是变量。你能救我吗?

3 个答案:

答案 0 :(得分:2)

<强>建议

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

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

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

答案 1 :(得分:0)

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

但是,这是非对象模式。而不是那样做,这样做:

  • 让您的MainWindow成为单身人士
  • 使您的main_f成为MainWindow的字段
  • 调用MainWindow.getInstance()。getFrame()。dispose()

另一种方法是向DisposingJFrame提供MainWindow的实例(就像那样,你不需要将MainFrame声明为单例)

答案 2 :(得分:0)

有一种最简单的方法。从另一个类处理类的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();
    }
}