如何从JPanel关闭基于动作事件的JavaJFrame
如何根据如何从JPanel关闭基于动作事件的JavaJFrame,java,swing,Java,Swing,如何根据ActionEvent从JPanel内的按钮点击关闭JFrame 我一共有三节课: Application:包含main方法,并通过创建FrameStartUp对象来运行程序 FrameStartUp:扩展JFrame类并显示StartUpPanel中的内容 StartUpPanel:扩展了JPanel类,并具有所有组件和ActionEvents 在StartUpPanel类中,我有一个按钮,上面有一个ActionEventListener等待单击按钮 单击按钮时,我希望应用程序完全
ActionEvent
从JPanel
内的按钮点击关闭JFrame
我一共有三节课:
:包含main方法,并通过创建Application
对象来运行程序FrameStartUp
:扩展FrameStartUp
类并显示JFrame
中的内容StartUpPanel
:扩展了StartUpPanel
类,并具有所有组件和JPanel
ActionEvents
StartUpPanel
类中,我有一个按钮,上面有一个ActionEventListener
等待单击按钮
单击按钮时,我希望应用程序完全关闭。我知道JFrame
类有一个名为.dispose()
的方法,但我不能使用它,因为创建FrameStartUp
的对象只会运行另一个GUI(由构造函数运行)
由于我是编程和swing新手,除了摆脱StartUpPanel
并在FrameStartUp
类中创建一个JPanel
之外,我不知道还有什么其他方法可以解决这个问题
Swing是否提供了任何方法,可以访问面板打开的当前JFrame
,以便在触发ActionEvent
时关闭程序
我知道对于JFrame
类有一个名为.dispose()
的方法
如果显式设置setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE),这将起作用代码>
Swing是否提供了任何方法可以访问面板上当前的JFrame
是的SwingUtilities
提供了一个名为GetWindow祖先()
的工具
按钮。addActionListener(e->{
SwingUtilities.getWindow祖先((组件)e.getSource()).dispose();
});
。。。或者更常见的是,您可以选择引用final
变量以实现相同的效果
final JFrame swingStuff=this;//或者通过getter/setter公开
按钮。addActionListener(e->{
swingStuff.dispose();
});
。。。然而,final
变量布局和setter/getter需要一个小的可复制代码示例
最后,正如其他人所提到的,System.exit(0)
也可以非常好地工作,只要它不破坏任何其他组件的生命周期
我的测试班:
import javax.swing.*;
导入java.awt.*;
公共类SwingStuff扩展JFrame{
//我们的主框架
公共SwingStuff(){
超级();
//按钮
JButton按钮=新JButton(“关闭”);
按钮。addActionListener(e->{
SwingUtilities.getWindow祖先((组件)e.getSource()).dispose();
});
//JPanel和嵌套组件
JPanel startupPanel=新的JPanel();
startupPanel.add(添加)按钮;
添加(启动面板);
包装();
//确保应用程序在关闭时退出
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//只是我们的切入点
公共静态void main(字符串…参数){
SwingUtilities.invokeLater(()->{
新SwingStuff().setVisible(true);
});
}
}
See(bad),它创建了一个糟糕的用户体验,您的任务栏可能会被多个窗口填满,并使您的用户感到困惑。您可以使用JPanels
和对话框
,也可以使用。为了获得更好的帮助,请尽快发布适当的系统。退出(0)代码>谢谢,这帮了大忙。