NoteEnter键通常用于触发ActionEvent而不是触发FocusEvent. 例如,如果您在按键时将 an 设置为ActionListenera ,它将发送一个.JTextFieldEnterActionEvent
因此,如果您Enter使用设置按键的行为,KeyboardFocusManager您将为所有Windows和覆盖此功能Components:
KeyboarFocusManager.setDefaultFocusTraversalKeys():
为给定的遍历操作设置默认的焦点遍历键。这个遍历键Set将对所有 Windows没有Set明确定义的对象有效。这也将被那些没有明确定义自己的孩子的Set任何孩子递归地继承。ComponentWindowsSet
如果您还想进行此更改,我建议您改用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);
这样,您需要为所需的每个组件设置操作。如果您有太多组件,这会很乏味,但它更灵活且可维护。