用按钮点击关闭JFrame窗口

30

我有JFrame的私有成员jButton1,并且当按钮被点击时,我想关闭该框架。

jButton1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e)
    {
    }
});
我想执行super.close(),但找不到超类的close方法。有没有什么方法可以引用JFrame?

我希望执行super.close(),但是找不到超类的close方法。有没有办法引用JFrame?

5个回答

46
你需要一个对特定帧的引用才能关闭它,但是假设你有这个引用,dispose()应该可以关闭该帧。
jButton1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e)
    {
       frameToClose.dispose();
    }
});

当这个条件为真时,如果你以那种方式跳过了与关闭事件相关联的所有EventListeners,那么就会出现问题。 - Vogel612
3
如何处理(销毁)当前的JFrame? - Tsakiroglou Fotis
如果我只想关闭窗口而不结束事件,该怎么办? - Srijan Chaudhary

18
JButton b3 = new JButton("CLOSE");

b3.setBounds(50, 375, 250, 50);

b3.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e)
    {
        System.exit(0);
    }
});

7
适用于单窗口应用程序,但如果你使用它来关闭一个窗口,它也会关闭所有其他窗口...(这是原文的直译) - geisterfurz007
@acp 我想在Java Swing中仅关闭相同类而不是先前的类。 - Ashish Shahi
System.exit(0); 方法有效,并且 dispose(); 方法也很好。 - Kavindu Gayantha
1
我认为使用System :: exit不是一个好主意,因为调用System.exit()将关闭整个JVM。 - timlg07

9

我看到你有两个问题。其一是JFrame没有close方法,这个问题在其他答案中已经得到解决。

另一个问题是你在引用JFrame时遇到了困难。在actionPerformed中,super指的是ActionListener。为了在那里引用JFrame实例,请改用MyExtendedJFrame.super(你也可以使用MyExtendedJFrame.this,因为我没有看到你想要覆盖disposesetVisible的行为)。


4
您可以使用super.dispose()方法,它更类似于关闭操作。

2
谢谢你尝试提供帮助 :-) 不幸的是,你的回答并没有提供太多有用的信息,甚至是错误的(监听器的super没有dispose,不需要调用frame的super,请参考@lins314159获取完整细节)。 - kleopatra

2
您可以使用JFrame的setVisible()方法(将可见性设置为false)或dispose()方法,后者更类似于close操作。

setVisible() 方法对我不起作用。我还以为可以通过将可见性设置为 false 来关闭应用程序... 我使用了 System.out(0); 方法。它有效... dispose() 方法也有效。 - Kavindu Gayantha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接