のAPIドキュメントによるとsetExtendedState
:
フレームが現在画面に表示されている場合(Window.isShowing()メソッドはtrueを返します)、開発者はWindowStateListenerを介して受信したWindowEventのWindowEvent.getNewState()メソッドの戻り値を調べて、状態が実際にあるかどうかを判断する必要があります。変更されました。
フレームが画面に表示されていない場合、イベントが生成される場合と生成されない場合があります。この場合、開発者は、このメソッドが戻った直後に状態が変化すると想定する場合があります。後で、setVisible(true)メソッドが呼び出されると、フレームはこの状態を適用しようとします。この場合も、WindowEvent.WINDOW_STATE_CHANGEDイベントの受信は保証されません。
windowDeiconified
ただし、フックできるコールバックもありWindowListener
ます。
SwingUtilities.invokeLater(new Runnable() {
private final WindowListener l = new WindowAdapter() {
@Override
public void void windowDeiconified(WindowEvent e) {
// Window now deiconified so bring it to the front.
bringToFront();
// Remove "one-shot" WindowListener to prevent memory leak.
frame.removeWindowListener(this);
}
};
public void run() {
if (frame.getExtendedState() == Frame.ICONIFIED) {
// Add listener and await callback once window has been deiconified.
frame.addWindowListener(l);
frame.setExtendedState(Frame.NORMAL);
} else {
// Bring to front synchronously.
bringToFront();
}
}
private void bringToFront() {
frame.getGlassPane().setVisible(!frame.getGlassPane().isVisible());
frame.toFront();
// Note: Calling repaint explicitly should not be necessary.
}
});