我尝试实现一种机制,它会在JComboBox
上多次点击(我使用popupListeners)之前阻止,并为该事件监听器执行包含。
例如:
public class SomeClass{
protected boolean semaphore = false;
public void initComboBox() {
JComboBox targetControllersComboBox = new JComboBox(); // combobox object
targetControllersComboBox.addPopupMenuListener(new PopupMenuListener() {
@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent event) {
if (semaphore == false) {
semaphore = true; // here acquired semaphor
// HERE SOME CODE //
semaphore = false; // here release semaphor
}
}
}
}
我想在执行popupListener之前已经运行代码之前避免在popupListener中运行代码。当popUplistener完成工作时,用户可以执行下一个popUplistener。不幸的是,我的例子并没有阻止这种情况。有人可以帮忙吗?我会很乐意帮忙。
更新:跟随(maris)重新发生问题:
@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent event) {
JComboBox comboBox = (JComboBox) event.getSource();
comboBox.removePopupMenuListener(this);
// some code ....
// now Listener is disabled and user cant execute next listener until this listener not stop working
comboBox.addPopupMenuListener(this); // after some code we add again listener, user now can use again listener
}
答案 0 :(得分:1)
一般来说,为避免在事件处理过程中发生重复事件,我们可以按照以下步骤操作:
我给出了JButton的骨架示例供您参考。
例如:
JButton submit = new JButton(...)
submit.addActionListener(this);
...
public void actionEvent(...) {
// on submit clicked
submit.removeActionListener();
// do the business logic
submit.addActionListener(this);
}
希望这会对你有所帮助。
此致
Maris的