Swing/InternalFrameKeyInputOperation のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/InternalFrameKeyInputOperation へ行く。
- category: swing folder: InternalFrameKeyInputOperation title: JInternalFrameをキー入力で移動、リサイズする tags: [JInternalFrame, JDesktopPane, InputMap] author: aterai pubdate: 2018/11/26T16:07:53+09:00 description: JInternalFrameのカーソルキー入力による移動、リサイズをテストします。 image: https://drive.google.com/uc?id=1xHC1_oVY3HI0SGcsd2zG2jsWp2CPMhMucg
概要
JInternalFrame
のカーソルキー入力による移動、リサイズをテストします。
Screenshot
Advertisement
サンプルコード
InputMap im = desktop.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
int modifiers = InputEvent.CTRL_DOWN_MASK;
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, modifiers), "shrinkUp");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, modifiers), "shrinkDown");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, modifiers), "shrinkLeft");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, modifiers), "shrinkRight");
View in GitHub: Java, Kotlin解説
move
:ctrl pressed F7
- Ctrl+F7で、現在フォーカスが存在する
JInternalFrame
をカーソルキーで移動可能なモードになる JInternalFrame
を完全にJDesktopPane
の範囲外にカーソルキーで移動は不可- アイコン化したフレームを移動可能な
WindowsLookAndFeel
などの場合でも、カーソルキーでのアイコン移動は不可 - ESCで移動モードは解除可能
- Ctrl+F7で、現在フォーカスが存在する
resize
:ctrl pressed F8
- Ctrl+F8で、現在フォーカスが存在する
JInternalFrame
をカーソルキーでリサイズ可能なモードになる - マウスによるリサイズが不可の場合でも、カーソルキーでのリサイズは可能
- デフォルトでは拡大のみ可能で縮小
Action
にはキー入力が割り当てられていないため、このサンプルではCtrl+UPなどでJInternalFrame
の上辺を縮小方向にリサイズ可能になるよう設定しているJInternalFrame
ではなく、JDesktopPane
のInputMap
に設定を追加する必要がある
NimbusLookAndFeel
では、カーソルキーによるリサイズでNullPointerException
が発生する1.8.0_192
、11.0.1
ともにエラーになる
- Ctrl+F8で、現在フォーカスが存在する
#{{ Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.desktop/javax.swing.plaf.basic.BasicDesktopPaneUI$Actions.actionPerformed(BasicDesktopPaneUI.java:472) at java.desktop/javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1810) at java.desktop/javax.swing.JComponent.processKeyBinding(JComponent.java:2900) at java.desktop/javax.swing.JComponent.processKeyBindings(JComponent.java:2962) at java.desktop/javax.swing.JComponent.processKeyEvent(JComponent.java:2862) at java.desktop/java.awt.Component.processEvent(Component.java:6409) at java.desktop/java.awt.Container.processEvent(Container.java:2263) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5008) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840) at java.desktop/java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1950) at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:871) at java.desktop/java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1140) at java.desktop/java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:1010) at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:836) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4889) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
}}
close
:ctrl pressed F4
restore
:ctrl pressed F5
selectNextFrame
:ctrl pressed F6
minimize
:ctrl pressed F9
maximize
:ctrl pressed F10