Swing/WindowStateListener の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/WindowStateListener へ行く。
- Swing/WindowStateListener の差分を削除
--- 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 --- * 概要 [#summary] `JFrame`の最大化、最小(アイコン)化イベントを取得します。 #download(https://drive.google.com/uc?id=13h_n-O0YyO15qpFv76ZEomH-8uWykdNI) * サンプルコード [#sourcecode] #code(link){{ ((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)); }); }} * 解説 [#explanation] 上記のサンプルでは、`JFrame`に`WindowListener`と`WindowStateListener`を追加して`WindowEvent`を取得するテストを実行しています。 - `WindowListener`で通常状態から最小化状態(`windowIconified(WindowEvent)`)、最小化状態から通常状態(`windowDeiconified(WindowEvent)`)は取得可能 - だだし最大化イベントは`WindowStateListener`を使用して`id`が`WINDOW_STATE_CHANGED`の`WindowEvent`から取得する必要がある - `Windows 10`環境で最大化状態は`Frame.MAXIMIZED_BOTH`のみサポートされているため、例えば垂直方向にフレームを画面端までリサイズして垂直最大化しても`WindowEvent`は発生しない - `Windows 10`環境の最大化状態のうち`Toolkit`でサポートしているのは`Frame.MAXIMIZED_BOTH`のみなので、たとえば垂直方向にフレームを画面端までリサイズして垂直最大化しても`WindowEvent`は発生しない -- [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/Toolkit.html#isFrameStateSupported-int- Toolkit#isFrameStateSupported(...) (Java Platform SE 8)] -- `Frame.MAXIMIZED_HORIZ`: サポート無し -- `Frame.MAXIMIZED_VERT`: サポート無し -- `Frame.MAXIMIZED_BOTH`: サポート在り * 参考リンク [#reference] - [https://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html How to Write Window Listeners (The Java™ Tutorials > Creating a GUI With JFC/Swing > Writing Event Listeners)] - [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/event/WindowStateListener.html WindowStateListener (Java Platform SE 8)] - [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/event/WindowEvent.html#getNewState-- WindowEvent#getNewState() (Java Platform SE 8)] - [[JInternalFrameの最大化、最大化からの復元イベントを取得する>Swing/InternalFrameMaximizedListener]] -- `JInternalFrame`も最大化イベントを`InternalFrameListener`からの直接取得は不可 * コメント [#comment] #comment #comment