Swing では、フレームを最小化 (アイコン化) するイベントをキャプチャする方法がいくつかありますが、フレームが ICONIFIED である場合、つまりフレームが画面から見えなくなったときにイベントが発生します。
ここで、フレームが消える前にいくつかのコードを実行したいと考えています。タスクバー ボタンをクリックした直後です。
つまり、JFrame が最小化される「直前」(後ではない) のときに何かを実行します。これを行うことは可能ですか?
Swing では、フレームを最小化 (アイコン化) するイベントをキャプチャする方法がいくつかありますが、フレームが ICONIFIED である場合、つまりフレームが画面から見えなくなったときにイベントが発生します。
ここで、フレームが消える前にいくつかのコードを実行したいと考えています。タスクバー ボタンをクリックした直後です。
つまり、JFrame が最小化される「直前」(後ではない) のときに何かを実行します。これを行うことは可能ですか?
を使用WindowStateListener
し、呼び出しWindowEvent#getNewState()
てチェックしFrame.ICONIFIED
ます。
以下に例を示します。
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test {
public Test() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel() {
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 300);
}
};
frame.add(panel);
frame.addWindowStateListener(new WindowAdapter() {
@Override
public void windowStateChanged(WindowEvent we) {
if (we.getNewState() == Frame.ICONIFIED) {
System.out.println("Here");
}
}
});
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Test();
}
});
}
}
独自のJFrame
オーバーライドsetExtendedState
メソッドを作成します。
public class MyFrame extends JFrame{
....
setExtendedState(JFrame.ICONIFIED);
....
@Override
public void setExtendedState(int state) {
// your code
super.setExtendedState(state);
};
}