我在java中创建了一些按钮,单击它时会显示一个新表单。我想使用箭头键选择按钮和空格键来单击它。 当我从ide或cmd运行项目时,我的代码工作。但是当使用eclipse创建可运行的jar文件时,按下键盘键时按钮没有突出显示。我只能使用鼠标。问题可能出在哪里是
答案 0 :(得分:3)
当我从ide或cmd运行项目时,我的代码有效。
那你是怎么做到的?我猜你正在使用KeyListener。 KeyListener仅在组件具有焦点时才起作用,我猜你的按钮没有焦点,所以代码不起作用。通常,您不应使用KeyListener Swing旨在与Key Bindings一起使用。
因此,解决此问题的一种方法是创建一个自定义Action,用于向前和向后制表,然后将这些操作绑定到包含按钮的面板。即使组件没有焦点,Key Binding
也可以正常工作。代码类似于:
InputMap im = panel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
String rightText = "RIGHT";
im.put(KeyStroke.getKeyStroke(rightText), rightText);
panel.getActionMap().put(rightText, new AbstractAction()
{
@Override
public void actionPerformed(ActionEvent e)
{
KeyboardFocusManager.getCurrentKeyboardFocusManager().focusNextComponent();
}
});
另一种方法是使用KeyboardFocusManager。 KeyboardFocusManager
管理焦点遍历。默认的焦点遍历键是Tab和Shift-Tab。
如果您还想使用箭头键,则需要将这些KeyStrokes添加到焦点管理器。因此,对于您想要更改的每个组件,您可以这样做:
Set<AWTKeyStroke> set = new HashSet<AWTKeyStroke>( button.getFocusTraversalKeys(
KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS ) );
set.add( KeyStroke.getKeyStroke( "RIGHT" ) );
button.setFocusTraversalKeys(
KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, set );
第一种方法适用于面板上的所有组件。单个组件的第二种方法。
答案 1 :(得分:0)
尝试将按钮的助记符属性设置为所需的键。
myJButton.setMnemonic(...);