NoteEnterキーは通常、 を発射することを意図していますActionEventが、FocusEvent. たとえば、キーを押しActionListenerたJTextFieldときに を に設定すると、Enterが送出されますActionEvent。
したがって、Enterキーを押したときの動作を次のように設定すると、すべてのandKeyboardFocusManagerに対してこの機能がオーバーライドされます。WindowsComponents
KeyboarFocusManager.setDefaultFocusTraversalKeys() :
特定のトラバーサル操作のデフォルトのフォーカス トラバーサル キーを設定します。このトラバーサル キーは、それ自体が明示的に定義されていないすべてのSetものに対して有効です。これは、それ自体が明示的に定義されていない子の子にも、再帰的に継承されます。 WindowsSetSetComponentWindowsSet
この変更をまだ行いたい場合は、代わりに 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);
このようにして、必要なコンポーネントごとにアクションを設定する必要があります。コンポーネントが多すぎると面倒ですが、より柔軟で保守しやすくなります。