如果我们使用回车键来设置组件旁边的焦点是否可行?但如果专注于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不起作用......
答案 0 :(得分:0)
注意Enter
密钥通常用于触发ActionEvent
但不是FocusEvent
。例如,如果您在按ActionListener
键时将JTextField
设置为Enter
,则会发送ActionEvent
。
因此,如果您使用Enter
设置了按下KeyboardFocusManager
键的行为,那么您将覆盖所有Windows
和Components
的此功能:
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}}
这样您就需要为所需的每个组件设置操作。如果你有太多的组件但它更灵活和可维护,那就太乏味了。