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

Java 避免多个按键:只选择一个,java,actionlistener,keylistener,synchronized,Java,Actionlistener,Keylistener,Synchronized,在我的ULC框架中,我实现了一些F热键(从F1到F12)。 但是可能会有一个小错误,例如,如果你想快速按下F10,也许你也可以用F11按下它。我想以某种方式避免它。因为现在它将为这两个键运行两个操作 如果有人按下两个注册键,但只运行其中一个,那么最好的解决方案是什么。如果这是第一次还是最后一次,那没关系 我已尝试使用synchronized关键字,但没有帮助,两个命令都将执行 第一个代码示例(内部同步(父级)): 第二个代码示例(outter同步方法): 实际上,这是一个ULCButton。这是

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

如果有人按下两个注册键,但只运行其中一个,那么最好的解决方案是什么。如果这是第一次还是最后一次,那没关系

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

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

第二个代码示例(outter同步方法):


实际上,这是一个ULCButton。这是一个旧的框架。。我想说的是:如果两个按钮同时按下,那么在释放后,两个按钮只能执行一个操作。这不属于我的专业范围。祝你好运though@victorio您必须确定应该以某种方式执行哪个按钮我真的怀疑这两个按钮是否会在您的用例的不同线程中执行。假设如此,我将提出一个解决方案。在您的
actionPerformed
中,将操作键添加到列表中,但仅当列表
大小<2
时(这再次假设用户没有最胖的手指一次按
3
键)。如果
size==2
,则调用一个方法,该方法查看列表并对第一个键(或第二个键,如果需要)执行操作
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));
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);
}