0

我通过扩展类将代码编写为一个类中的设计部分JFrame,以及另一个类(不是内部类)中按钮的动作侦听器,最后对于主要方法,我采用了单独的类。在侦听器类中,我正在关闭当前窗口并打开新窗口。我可以打开新窗口。但我不能关闭现有的窗口。请帮助我。(我无法访问setVisible()方法)监听器类:

public void actionPerformed(ActionEvent e) {     //new window opens   
    EmbeddedBrowser eb = new EmbeddedBrowser();
    eb.setVisible(true);    //how to close previous window
}
4

1 回答 1

0

要关闭前一个窗口,您必须以某种方式传递对 JFrame 的引用。另一种方法是从 ActionEvent 中获取 JButton 并爬上父级(使用 JComponent#getParent)以找到 JFrame(但我认为这是一种肮脏的解决方法)。

所以你可以使用这个监听器类:

public class MyListener extends ActionListener {

    private JFrame frameToClose;

    public MyListener(JFrame frameToClose) {
        this.frameToClose = frameToClose;
    }

    public void actionPerformed(ActionEvent e) {
        //new window opens   
        EmbeddedBrowser eb= new EmbeddedBrowser();
        eb.setVisible(true);
        frameToClose.setVisible(false);
    }

}

请注意,这与编译器在使用内部/匿名类时生成的内容相匹配。如果您不再需要 frameToClose,您可以调用 JFrame#disposed 而不是 setVisble(false)。

于 2013-11-11T10:25:12.527 回答