在我的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);
}