如果您正在尋找結合輸入鍵就可以使用KeyEvent.VK_ENTER
,即:
getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "someAction");
getActionMap().put("someAction", someAction);
下面是一個簡單的例子:
import java.awt.event.*;
import javax.swing.*;
public class Test {
public static void main(String[] args) throws Exception {
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.add(new JLabel("Hit Enter"));
Action someAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(frame, "Got it");
}
};
panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "someAction");
panel.getActionMap().put("someAction", someAction);
frame.add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
編輯: VK_ENTER在數字鍵盤vs主鍵盤上
經過一些測試,看起來好像不可能分別綁定這些鍵。 對於兩個密鑰都會生成相同的KeyStroke
。 JComponent.processKeyBinding
的執行沒有檢查KeyEvent
,所有它關心的是KeyStroke
以便找到所需的操作。
SwingUtilities.notifyAction
即負責調度的實際行動不委託KeyEvent
(只有關鍵,修飾和時間)的所有細節。所以在內部行動中,無法區分ActionEvent
中沒有細節。
如果值得遇到麻煩,您可以覆蓋processKeyBinding
並根據需要添加一些邏輯。您還可以使用KeyboardFocusManageraddKeyEventDispatcher()
來阻止其中一個密鑰。
雖然在技術上是正確的,因爲它應該既應對輸入鍵,相信OP要限制行動只是小鍵盤迴車鍵 – MadProgrammer
@MadProgrammer真的,我可能誤解的問題。可能無法區分這兩個鍵。我想知道OP是否能提供更多細節。 – tenorsax