0

コンポーネントの次にフォーカスを設定するキーをエンターキーにすれば可能ですか? しかし、jbutton に焦点を合わせた場合、Enter キーを押すと jbutton が起動しますか? 私を助けてください。私の言語が悪い場合は申し訳ありませんが、私は英語を上手に話すことができません。ごめんなさい。しかし、私を助けてください。

このコードを使用して、コンポーネントの次のフォーカスを設定します。

Set<AWTKeyStroke> set = new HashSet<AWTKeyStroke>(KeyboardFocusManager
    .getCurrentKeyboardFocusManager().getDefaultFocusTraversalKeys(
        KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
set.add(KeyStroke.getKeyStroke("ENTER"));
KeyboardFocusManager.getCurrentKeyboardFocusManager().setDefaultFocusTraversalKeys(
    KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, set);

このコードを使用して、Enterキーをjbuttonの起動に設定します

UIManager.put("Button.defaultButtonFollowsFocus", Boolean.TRUE);

しかし、Enterキーでjbuttonを起動しても機能しません...

4

1 に答える 1

0

NoteEnterキーは通常、 を発射することを意図していますActionEventが、FocusEvent. たとえば、キーを押しActionListenerJTextFieldときに を に設定すると、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);

このようにして、必要なコンポーネントごとにアクションを設定する必要があります。コンポーネントが多すぎると面倒ですが、より柔軟で保守しやすくなります。

于 2013-10-21T12:37:59.320 に答える