输入键以便下一步聚焦但不在jbutton上

时间:2013-10-20 13:53:54

标签: java swing jbutton

如果我们使用回车键来设置组件旁边的焦点是否可行?但如果专注于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);

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

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

但是使用回车键启动jbutton不起作用......

1 个答案:

答案 0 :(得分:0)

注意Enter密钥通常用于触发ActionEvent但不是FocusEvent。例如,如果您在按ActionListener键时将JTextField设置为Enter,则会发送ActionEvent

因此,如果您使用Enter设置了按下KeyboardFocusManager键的行为,那么您将覆盖所有WindowsComponents的此功能:

KeyboarFocusManager.setDefaultFocusTraversalKeys()

  

设置给定遍历操作的默认焦点遍历键。   此遍历键Set将对所有 Windows生效   他们自己明确定义的Set。这个Set也将是   由Component那些Windows的任何孩子Set递归地继承   没有自己明确定义的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);

如果您还想进行此项更改,我建议您改为使用JComponent.getInputMap()JComponent.getActionMap()。例如:

{{1}}

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