在雨雲大號& f出現一個按下Enter鍵,如果按鈕具有焦點,這個按鈕被點擊另一個按鈕是否已經被設置爲默認爲:如何修改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);
我從來沒有看到「來到這裏」的消息,但如果我綁定到另一個鍵擊,如「P」,它的功能與預期。所以看起來Enter鍵在它到達這個事件處理程序之前被捕獲。
我也嘗試修改的UIDefaults:
im = (InputMap) UIManager.getDefaults().get("Button.focusInputMap");
im.put(enter, null);
im.put(enterRelease, null);
這也失敗了。任何人有任何想法如何做到這一點?
--- 更新 ---
進一步調查顯示,JButton的InputMap中包含{ 「按下回車」: 「壓」, 「發佈ENTER」: 「釋放」}(以及綁定SPACE)。相關組件的密鑰綁定比RootPane具有更高的優先級。請參閱下面的答案,瞭解解決問題的代碼。
不幸的是,這似乎不適用於Nimbus。實際上,Nimbus Defaults頁面:[link](http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/_nimbusDefaults.html)表示Button.defaultButtonFollowsFocus設置爲False。我還使用getDefaults()進行了檢查,以驗證是否如此。 – acarlow 2011-03-03 04:53:52