3

InputMap / ActionMap を使用して KeyEvent.VK_ENTER を処理できる特定の JComponents (JPanels など) を含むアプリケーションがあります。

これはうまく機能しますが、1 つの例外があります。ファイルを選択するための JFileChooser があり、この選択をキーボードから終了した場合、このキーイベントはアプリケーションの次のアクティブな JPanel に渡されます。ファイルの選択はうまく機能しますが、Enter が押された/離された/入力されたというイベントは転送されます。このパネルでは、そのパネルの KeyEvent.VK_ENTER に関連するアクションが実行されます。マウスで JFileChooser を終了すると、期待どおりに動作し、次のアクティブな JPanel では何も行われません。

JFileChooser でそのような KeyEvent を使用するにはどうすればよいですか? JFileChooser をカバーするクラスで KeyBinding を確立しようとしましたが、うまくいきません。この部分のコードをここに追加します。

public myClass(String theirDir){
    fc = new FileChooser(theirDir);
    this.bindKeyToAction(fc, KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, true);
}// end constructor()

private bindKeyToAction(JComponent theirComp, KeyStroke theirStroke){
    InputMap localInput = theirComp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    localInput.put(theirStroke, theirStroke,.getKeyChar());

    theirComp.getActionMap().put(theirStroke.getKeyChar(), this.generateAction(new String("theCommand");
}// end bindKeyToAction

private Action generateAction(String theirID){
    final String localID = theirID;

    return new AbstractAction(theirID){
        public void actionPerformed(ActionEvent theirEve){
           do something....
        }
    };
}// end generateAction()

...
}// end myClass

でも「何とかして…」には届かない!?

4

0 に答える 0