3

私はGUIに取り組んでいます。

Gui は次のように構築されます。 (カスタム) leftPanel および rightPanel を含む JFrame。RightPanel は tabbedpane の拡張であり、タブの 1 つとして MainTab クラスを含みます。

Maintab には次のコードがあります。

private void createKeyBindings(){
    actionMap = this.getActionMap();
    inputMap = this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    inputMap.put(KeyStroke.getKeyStroke("UP),
            "pressedUpArrow");
    inputMap.put(KeyStroke.getKeyStroke("released UP"),
           "releasedUpArrow");
    actionMap.put("pressedUpArrow",
             new PressedUpArrowAction());
    actionMap.put("releasedUpArrow",
            new ReleasedUpArrowAction());
    inputMap.put(KeyStroke.getKeyStroke("RIGHT"),
            "pressedRightArrow");
    inputMap.put(KeyStroke.getKeyStroke("released RIGHT"),
           "releasedRightArrow");
    actionMap.put("pressedRightArrow",
             new PressedRightArrowAction());
    actionMap.put("releasedRightArrow",
            new ReleasedRightArrowAction());
    inputMap.put(KeyStroke.getKeyStroke("LEFT"),
            "pressedLeftArrow");
    inputMap.put(KeyStroke.getKeyStroke("released LEFT"),
           "releasedLeftArrow");
    actionMap.put("pressedLeftArrow",
             new PressedLeftArrowAction());
    actionMap.put("releasedLeftArrow",
            new ReleasedLeftArrowAction());
    inputMap.put(KeyStroke.getKeyStroke("RIGHT"),
            "pressedRightArrow");
    inputMap.put(KeyStroke.getKeyStroke("released RIGHT"),
           "releasedRightArrow");
    actionMap.put("pressedRightArrow",
             new PressedRightArrowAction());
    actionMap.put("releasedRightArrow",
            new ReleasedRightArrowAction());
    inputMap.put(KeyStroke.getKeyStroke("DOWN"),
            "pressedDownArrow");
    inputMap.put(KeyStroke.getKeyStroke("released DOWN"),
           "releasedDownArrow");
    actionMap.put("pressedDownArrow",
             new PressedDownArrowAction());
    actionMap.put("releasedDownArrow",
            new ReleasedDownArrowAction());
}

そのため、矢印キーの 1 つを押して放したときにアクションを実行する必要があります。

しかし、矢印キーの1つを離したときにのみ何かを行います. 原因はおそらく、LeftPanel または RightPanel の他のコンポーネントの 1 つ、またはパネル自体が、そのキーバインドを別の目的で既に使用していることです。

クラス自体 ( this.getInputMap().clear() ) の inputmaps と actionmaps をクリアしようとしましたが、問題は残ります。解決策はありますか?

4

1 に答える 1