添加全局键盘快捷键以动态添加按钮

时间:2013-04-17 07:52:34

标签: java swing

我在设置动态添加按钮的快捷方式时遇到了一些困难。按钮是动态添加的面板。我想为这些按钮添加键盘快捷键,如下所示:

ctrl+1 -> button1
ctrl+2 -> button2
etc.

按钮是通过算法添加的,所以我不知道它们中会有多少(最小0,最大5)。我想用Global(在整个面板中工作)键盘快捷键调用这些按钮。我想知道如何实现这一点,当我的按钮上的文本动态地这样做:

getNewAmountQueryButton(label)

这使得:

private JButton getNewAmountQueryButton(final Decimal label) {
    JButton temp = new JButton(label.toString());
    ...

我尝试添加keylistener,但只有当我专注于按钮时它才有效:

button.addKeyListener(new KeyAdapter() {

        @Override
        public void keyPressed(final KeyEvent e) {
                @Override
                public void run() {
                    if ((e.getKeyCode() == getKeyCode()) && ((e.getModifiers() & InputEvent.CTRL_MASK) != 0)) {
                        model.setAmount(model.getAmount().add(label));
                        field().selectAll();
                        refreshDisplay();
                    }
                }
            });
    });

你知道我怎么能这样做?我想将监听器添加到顶级面板,但是当我使用model.setAmount(model.getAmount().add(label));刷新一些textField时,由于缺少此label参数,因此不可能。

有什么想法吗? 提前谢谢!

2 个答案:

答案 0 :(得分:1)

使用Action封装每个按钮的行为。您可以指定所需的MNEMONIC_KEY,如图所示here,然后您可以向ACCELERATOR_KEY添加绑定,如here所示。

答案 1 :(得分:1)

建议您使用Key Bindings

基本上,他们不会遇到与KeyListeners

相同的焦点问题