JComboBox在键盘快捷键之前优先

时间:2018-03-17 10:58:26

标签: jcombobox shortcut

我在java中添加了一些键盘快捷键,大部分时间它们都按预期工作。 仅在焦点位于comboBox内部且组合框包含以快捷方式开头的值时,然后按键更改组合框值,而不是运行操作。

在下面的示例中,我希望按1/2会始终调用button1 / button2,而是更改组合中的值。

有没有简单的方法可以改变这种行为?

enter image description here

+请注意,我尝试在函数registerKeyboardAction中设置3参数 相反:

JComponent.WHEN_IN_FOCUSED_WINDOW

到:

JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT

那没有帮助。

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

public class TestCombo {

    public static void main(String[] args) {

        JFrame frame = new JFrame("TEST");

        JPanel panel = new JPanel();

        JComboBox<String> comboBox = new JComboBox<String>(new String[]{"1", "2", "3", "4", "5"});

        panel.add(comboBox);

        JButton button1 = new JButton(new TextAction("Text1"));
        JButton button2 = new JButton(new TextAction("Text2"));

        panel.add(button1);
        panel.add(button2);

        panel.registerKeyboardAction(button1.getAction(), KeyStroke.getKeyStroke(KeyEvent.VK_1, 0, false), JComponent.WHEN_IN_FOCUSED_WINDOW);
        panel.registerKeyboardAction(button2.getAction(), KeyStroke.getKeyStroke(KeyEvent.VK_2, 0, false), JComponent.WHEN_IN_FOCUSED_WINDOW);

        frame.add(panel);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setPreferredSize(new Dimension(400, 200));
        frame.pack();
        frame.setVisible(true);

    }


    private static class TextAction extends AbstractAction{

        private String text;

        public TextAction(String vText){
            text = vText;
            putValue(Action.NAME, text);
        }


        @Override
        public void actionPerformed(ActionEvent arg0) {
            JOptionPane.showMessageDialog(null, text);
        }


    }
}

1 个答案:

答案 0 :(得分:0)

我搜索了其他帖子,目前没有找到最佳解决方案,但作为解决方法,我找到了在组合框值中添加一些前缀的选项(例如每个值之前的空格)。这样捷径就行了起来。当然问题是您将无法使用键来搜索组合框值。但就我而言,这就是我想要的。

JComboBox<String> comboBox = new JComboBox<String>(new String[]{" 1", " 2", " 3", " 4", " 5"});