0

如果我们让输入键来设置组件的下一个焦点,是否有可能?但是如果专注于jbutton,那么输入键会触发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);

我使用此代码将输入键设置为触发 jbutton

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

但是用回车键触发 jbutton 不起作用......

4

1 回答 1

0

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);

这样,您需要为所需的每个组件设置操作。如果您有太多组件,这会很乏味,它更灵活且可维护。

于 2013-10-21T12:37:59.320 回答