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
でも「何とかして…」には届かない!?