私はJava Swing開発の初心者で、次の問題があります。
Swing JDesktopフレームワークを使用するアプリケーションに取り組んでいます。
したがって、次の2つのクラスがあります。
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 の起動メソッドを呼び出します。launch メソッドは通常、アプリケーションのメインから呼び出されます。applicationClass コンストラクターとスタートアップ メソッドは、イベント ディスパッチ スレッドで実行されます。
したがって、startup()メソッドが実行され、新しいメインフレームオブジェクトが作成されて表示されます。
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()メソッドが実行されます。このイベントを傍受できず、これは私にとって大きな問題です
誰かが私を助けることができますか?
TNX
アンドレア