【问题标题】:button highlighting using keyboard keys使用键盘键突出显示按钮
【发布时间】:2014-12-21 00:20:50
【问题描述】:

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

【问题讨论】:

    标签: java swing


    【解决方案1】:

    当我从 ide 或 cmd 运行项目时,我的代码可以工作。

    那么你是怎么做到的呢?我猜你正在使用 KeyListener。 KeyListener 仅在组件具有焦点时才有效,我猜您的按钮没有焦点,因此代码不起作用。一般来说,你不应该使用 KeyListener Swing 被设计为与 Key Bindings 一起使用。

    因此,解决此问题的一种方法是创建一个自定义操作,用于向前和向后切换,然后将这些操作绑定到包含按钮的面板。即使组件没有焦点,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 );
    

    第一种方法适用于面板上的所有组件。单个组件的第二种方法。

    【讨论】:

    • 是的,我正在使用按键侦听器。当我按下箭头键时,下一个相应的按钮将获得焦点,并且会更改其图标以显示它已突出显示。最初,第一个按钮将具有焦点。问题是当一个可运行的 jar 运行时,第一个按钮没有突出显示。
    • @srinivas Yea i am using a key listener. - 我给了你两个更好的解决方案。
    • 现在可以使用了。我从网豆创建了 jar。我没有对代码进行任何更改。我不明白为什么从 eclipse 导出时它不起作用。我也会尝试这两种解决方案!
    【解决方案2】:

    尝试将按钮的助记符属性设置为您想要的键。

    myJButton.setMnemonic(...);
    

    【讨论】:

    • 有 5 个按钮,最初将选择第一个。左右箭头键用于循环浏览按钮。
    • 我不太清楚方向键的键码是什么。但是如果你在 NetBeans 上制作 GUI,编辑器会为你做这些
    • 我尝试创建两个按钮,但我无法使用箭头键选择按钮
    • 那应该是tab
    • 是的 tab 键有效。我应该做些什么改变才能使用它与箭头键
    猜你喜欢
    • 2012-02-11
    • 2015-06-07
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多