我是 Java Swing 开发的新手,遇到以下问题:
我有这个GUI
包含main()
方法的类:
package com.test.login3;
import org.jdesktop.application.SingleFrameApplication;
public class GUI extends SingleFrameApplication {
public static void main(String[] args) {
launch(GUI.class, args);
}
@Override
protected void startup() {
// TODO Auto-generated method stub
System.out.println("GUIBis ---> startUp()");
MainFrame mainFrame = new MainFrame();
mainFrame.setVisible(true);
}
@Override
protected void shutdown() {
System.out.println("Entered into GUI ---> shutdown()");
}
}
正如您在此类中看到的,有一个main()
方法可以简单地执行此操作:
launch(GUI.class, args);
阅读官方文档:launch doc
创建指定 Application 子类的实例,设置 ApplicationContext 应用程序属性,然后调用新 Application 的启动方法。启动方法通常从应用程序的 main 调用。applicationClass 构造函数和启动方法在事件调度线程上运行。
所以该startup()
方法被执行并创建并显示一个新MainFrame
对象
2) 这是 MainFrame 代码(它扩展了经典的 Swing JFrame):
package com.test.login3;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
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);
public MainFrame() {
super();
setPreferredSize(INITAL_SIZE);
setResizable(false);
setTitle("My Application");
setLayout(new MigLayout("fill"));
JButton logOutButton = new JButton("LogOut");
logOutButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
// Execute when button is pressed:
System.out.println("You clicked the button");
}
});
add(logOutButton);
pack();
setLocationRelativeTo(null); // Center the window
}
}
我的问题是这样的:
正如您在GUI.java
类中看到的那样,定义了一个shutdown()
方法(在SingleFrameApplication
抽象类中定义)。这是此方法的文档:shutdown doc
阅读文档:
保存以 mainFrame 为根的组件层次结构的会话状态。
当用户单击在类JButton
中声明的那个MainFrame
时,我希望执行该shutdown()
方法(在GUI
类中声明)。
您是否有实现此行为的解决方案?
谢谢
安德烈亚