NoteEnter
キーは通常、 を発射することを意図していますActionEvent
が、FocusEvent
. たとえば、キーを押しActionListener
たJTextField
ときに を に設定すると、Enter
が送出されますActionEvent
。
したがって、Enter
キーを押したときの動作を次のように設定すると、すべてのandKeyboardFocusManager
に対してこの機能がオーバーライドされます。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);
このようにして、必要なコンポーネントごとにアクションを設定する必要があります。コンポーネントが多すぎると面倒ですが、より柔軟で保守しやすくなります。