Nimbus L&F で Enter キーを押すと、ボタンにフォーカスがある場合、別のボタンが次のようにデフォルトとして設定されているかどうかに関係なく、そのボタンがクリックされます。
getRootPane().setDefaultButton(myButton);
また、キーバインディングを使用しても機能しません:
Action clickDefault = new AbstractAction("clickDefault") {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Got Here");
getRootPane().getDefaultButton().doClick();
}
};
InputMap im = getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
KeyStroke enter = KeyStroke.getKeyStroke("ENTER");
im.put(enter, "defaultButton");
getRootPane().getActionMap().put("defaultButton", clickDefault);
「Got Here」メッセージすら表示されませんが、「P」などの別の KeyStroke にバインドすると、期待どおりに機能します。そのため、このイベント ハンドラーに到達する前に Enter キーがキャプチャされているように見えます。
UIDefaults の変更も試みました。
im = (InputMap) UIManager.getDefaults().get("Button.focusInputMap");
im.put(enter, null);
im.put(enterRelease, null);
それも失敗しました。これを達成する方法はありますか?
---アップデート---
さらに調査した結果、JButton の InputMap には {"pressed Enter": "pressed", "released ENTER": "released"} (および SPACE のバインド) が含まれていることが明らかになりました。問題のコンポーネントのキー バインディングは、RootPane よりも優先されます。問題を解決するコードについては、以下の私の回答を参照してください。