我是 Java Swing开发的新手,我有以下问题。
我正在开发一个使用 Swing JDesktop框架的应用程序。
所以我有以下两个课程:
1)GUI.java:
package com.test.login2;
import org.jdesktop.application.SingleFrameApplication;
public class GUI extends SingleFrameApplication {
// Estensione di JFrame:
private MainFrame mainFrame = null;
@Override
protected void startup() {
System.out.println("GUI ---> startUp()");
mainFrame = new MainFrame();
mainFrame.setVisible(true);
}
// Save session state for the component hierarchy rooted by the mainFrame:
@Override
protected void shutdown() {
System.out.println("ShutDown event intercepted by the GUI ---> sutdown() method");
}
public static void main(String[] args) {
System.out.println("GUI ---> main()");
/* Creates an instance of the specified Application subclass (SingleFrameApplication),
* sets the ApplicationContext application property, and then calls the new Application's startup method.
*/
launch(GUI.class, args);
}
}
正如你在这个类中看到的,有一个简单地执行这个操作的main()方法:
launch(GUI.class, args);
阅读官方文档:launch() doc
创建指定 Application 子类的实例,设置 ApplicationContext 应用程序属性,然后调用新 Application 的启动方法。启动方法通常从应用程序的 main 调用。applicationClass 构造函数和启动方法在事件调度线程上运行。
所以startup()方法被执行并创建并显示一个新的MainFrame对象
2)所以这是MainFrame代码(它只是扩展了经典的 Swing JFrame):
package com.test.login2;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import com.test.login.LoginFrame;
import net.miginfocom.swing.MigLayout;
public class MainFrame extends JFrame {
private static final int FIXED_WIDTH = 1000;
private static final Dimension INITAL_SIZE = new Dimension(FIXED_WIDTH, 620);
private final Action actionLogOut = new AbstractAction() {
{
putValue(Action.NAME, ("LogOut"));
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.out.println("MainWindows ---> actionPerformed()");
JButton button = (JButton)e.getSource();
Window window = SwingUtilities.windowForComponent(button);
//window.setVisible(false);
//window.dispose();
}
};
public MainFrame() {
super();
setPreferredSize(INITAL_SIZE);
setResizable(false);
setTitle("My Application");
setLayout(new MigLayout("fill"));
add(new JButton(actionLogOut)); // Add the LogOut JButton to the current MainFrame object
pack();
setLocationRelativeTo(null); // Center the window
}
}
在这个阶段,JButton和相关侦听器的存在并不是很重要。
我的问题是以下一个:
正如您在 GUI.java 中看到的,类定义了一个shutdown()方法(在SingleFrameApplication抽象类中定义)。
阅读文档:
保存以 mainFrame 为根的组件层次结构的会话状态。
所以GUI.java类的 main() 方法执行创建和显示MainFrame对象的startup()方法的操作(直到这里很清楚)
然后我希望当我单击 X 按钮(关闭 JFrame 的按钮)时,将执行( GUI.java类的) shutdown()方法。我无法拦截此事件,这对我来说是个大问题
有人可以帮助我吗?
肿瘤坏死因子
安德烈亚