4

Swing では、フレームを最小化 (アイコン化) するイベントをキャプチャする方法がいくつかありますが、フレームが ICONIFIED である場合、つまりフレームが画面から見えなくなったときにイベントが発生します。

ここで、フレームが消える前にいくつかのコードを実行したいと考えています。タスクバー ボタンをクリックした直後です。

つまり、JFrame が最小化される「直前」(後ではない) のときに何かを実行します。これを行うことは可能ですか?

4

3 に答える 3

3

を使用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();
            }
        });
    }
}
于 2012-12-09T23:57:19.517 に答える
0

独自のJFrameオーバーライドsetExtendedStateメソッドを作成します。

public class MyFrame extends JFrame{

   ....
    setExtendedState(JFrame.ICONIFIED); 
   ....


@Override
public void setExtendedState(int state) {       
    // your code

    super.setExtendedState(state);
   };

 }
于 2012-12-09T22:47:20.310 に答える