按钮突出显示使用键盘键

时间:2014-12-20 07:26:49

标签: java swing

我在java中创建了一些按钮,单击它时会显示一个新表单。我想使用箭头键选择按钮和空格键来单击它。 当我从ide或cmd运行项目时,我的代码工作。但是当使用eclipse创建可运行的jar文件时,按下键盘键时按钮没有突出显示。我只能使用鼠标。问题可能出在哪里是

2 个答案:

答案 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();
    }
});

另一种方法是使用KeyboardFocusManagerKeyboardFocusManager管理焦点遍历。默认的焦点遍历键是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(...);