NoteEnter
键通常用于触发ActionEvent
而不是触发FocusEvent
. 例如,如果您在按键时将 an 设置为ActionListener
a ,它将发送一个.JTextField
Enter
ActionEvent
因此,如果您Enter
使用设置按键的行为,KeyboardFocusManager
您将为所有Windows
和覆盖此功能Components
:
KeyboarFocusManager.setDefaultFocusTraversalKeys():
为给定的遍历操作设置默认的焦点遍历键。这个遍历键Set
将对所有 Windows
没有Set
明确定义的对象有效。这也将被那些没有明确定义自己的孩子的Set
任何孩子递归地继承。Component
Windows
Set
如果您还想进行此更改,我建议您改用JComponent.getInputMap()和JComponent.getActionMap()。例如:
AbstractAction action = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() instanceof JButton){
JButton button = (JButton) e.getSource();
button.doClick();
} else if(e.getSource() instanceof JComponent){
JComponent component = (JComponent) e.getSource();
component.transferFocus();
}
}
};
JTextField textField1 = new JTextField();
textField1.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "TransferFocus");
textField1.getActionMap().put("TransferFocus", action);
JTextField textField2 = new JTextField();
textField2.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "TransferFocus");
textField2.getActionMap().put("TransferFocus", action);
JButton button1= new JButton();
button1.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Enter");
button1.getActionMap().put("Enter", action);
这样,您需要为所需的每个组件设置操作。如果您有太多组件,这会很乏味,但它更灵活且可维护。