Swing/WindowStateListener のバックアップの現在との差分(No.2)
- category: swing folder: WindowStateListener title: JFrameの最大化、最小化イベントを取得する tags: [JFrame, WindowStateListener, WindowListener] author: aterai pubdate: 2020-01-06T14:51:22+09:00 description: JFrameの最大化、最小(アイコン)化イベントを取得します。 image: https://drive.google.com/uc?id=13h_n-O0YyO15qpFv76ZEomH-8uWykdNI
概要
JFrame
の最大化、最小(アイコン)化イベントを取得します。
Screenshot
Advertisement
サンプルコード
((JFrame) c).addWindowStateListener(e -> {
String ws;
switch (e.getNewState()) {
case Frame.NORMAL:
ws = "NORMAL";
break;
case Frame.ICONIFIED:
ws = "ICONIFIED";
break;
case Frame.MAXIMIZED_HORIZ:
ws = "MAXIMIZED_HORIZ";
break;
case Frame.MAXIMIZED_VERT:
ws = "MAXIMIZED_VERT";
break;
case Frame.MAXIMIZED_BOTH:
ws = "MAXIMIZED_BOTH";
break;
default:
ws = "ERROR";
break;
}
log.append(String.format("WindowStateListener: %s%n", ws));
});
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JFrame
にWindowListener
とWindowStateListener
を追加してWindowEvent
を取得するテストを実行しています。
WindowListener
で通常状態から最小化状態(windowIconified(WindowEvent)
)、最小化状態から通常状態(windowDeiconified(WindowEvent)
)は取得可能ですが、最大化イベントはWindowStateListener
を使用してid
がWINDOW_STATE_CHANGED
のWindowEvent
から取得する必要があります。
- -
-
Windows 10
環境で最大化状態はFrame.MAXIMIZED_BOTH
のみサポートされているので、例えば垂直方向にフレームを画面端までリサイズして垂直最大化しても、WindowEvent
は発生しない -
WindowListener
で通常状態から最小化状態(windowIconified(WindowEvent)
)、最小化状態から通常状態(windowDeiconified(WindowEvent)
)は取得可能 - だだし最大化イベントは
WindowStateListener
を使用してid
がWINDOW_STATE_CHANGED
のWindowEvent
から取得する必要がある -
Windows 10
環境の最大化状態のうちToolkit
でサポートしているのはFrame.MAXIMIZED_BOTH
のみなので、たとえば垂直方向にフレームを画面端までリサイズして垂直最大化してもWindowEvent
は発生しない- Toolkit#isFrameStateSupported(...) (Java Platform SE 8)
-
Frame.MAXIMIZED_HORIZ
: サポートしていない -
Frame.MAXIMIZED_VERT
: サポートしていない -
Frame.MAXIMIZED_BOTH
: サポートしている -
Frame.MAXIMIZED_HORIZ
: サポート無し -
Frame.MAXIMIZED_VERT
: サポート無し -
Frame.MAXIMIZED_BOTH
: サポート在り
参考リンク
- How to Write Window Listeners (The Java™ Tutorials > Creating a GUI With JFC/Swing > Writing Event Listeners)
- WindowStateListener (Java Platform SE 8)
- WindowEvent#getNewState() (Java Platform SE 8)
- JInternalFrameの最大化、最大化からの復元イベントを取得する
JInternalFrame
も最大化イベントをInternalFrameListener
からの直接取得は不可