避免多次按键:只选择一个

时间:2017-04-13 14:05:12

标签: java actionlistener keylistener synchronized

在我的ULC框架中,我实现了一些F热键(从F1到F12)。 但是可能会有一个小错误,例如,如果你想快速按下F10,也许你也用F11按它。我想以某种方式避免它。因为现在它将为这两个键运行两个动作。

如果有人按下两个已注册的密钥,但只运行一个密钥,那么最佳解决方案是什么。如果这个是第一个或最后一个,那没关系。

我尝试使用 synchronized 关键字,但它没有帮助,两个命令都将被执行。

第一个代码示例(内部同步(父)):

Button buttonFirst = createButton("F10");
buttonFirst.addActionListener(new IActionListener() {
    @Override
    public void actionPerformed(ActionEvent event) {
        synchronized (parent) {
            System.out.println("F10 - pressed");
            doSomething(1);
        }
    }
});
buttonFirst.addActionKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_F10, 0, true));

Button buttonSecond = createButton("F11");
buttonSecond.addActionListener(new IActionListener() {
    @Override
    public void actionPerformed(ActionEvent event) {
        synchronized (parent) {
            System.out.println("F11 - pressed");
            doSomething(2);
        }
    }
});
buttonSecond.addActionKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_F11, 0, true));

第二个代码示例(outter synchronized method):

Button buttonFirst = createButton("F10");
buttonFirst.addActionListener(new IActionListener() {
    @Override
    public void actionPerformed(ActionEvent event) {
        doSomething("F10",1);
    }
});
buttonFirst.addActionKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_F10, 0, true));

Button buttonSecond = createButton("F11");
buttonSecond.addActionListener(new IActionListener() {
    @Override
    public void actionPerformed(ActionEvent event) {
        doSomething("F11",2);
    }
});
buttonSecond.addActionKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_F11, 0, true));

private synchronized void doSomething(String keyName, int value) {
    System.out.println(keyName+" - pressed");
    doSomething(value);
}

0 个答案:

没有答案