我正在使用基于Swing的应用程序中的组合框,我很难弄清楚如何区分由用户事件生成的ItemEvent和由应用程序引起的a。
例如,假设我有一个组合框'combo
‘,我正在用我的ItemListener 'listener
’监听itemStateChanged事件。当用户将选择更改为项目2,或者我执行行(伪代码)时:
combo.setSelection(2)
。。看起来我不能区分这些事件。
也就是说,我无论如何都不是Swing专家,所以我想我应该问一下。
谢谢!
发布于 2008-10-07 08:40:30
Action和Reaction法则非常明确:)。如果您尝试对更改做出反应,则不需要区分用户和应用程序。我可以想象只有一个用例需要“区分”。应用程序显示某些数据的情况。在这种情况下,您可能拥有应用程序的数据模型。此外,此模型中的侦听器和应用程序GUI将通过设置组件的值来做出反应。还有。如果用户选择了GUI组件中的任何内容。数据模型将通过改变值来做出反应。在这种情况下,很容易在数据模型上设置某种只读状态,它将通知模型忽略来自观察对象的任何事件。此通知集应在EDT中运行,并且标记没有问题。小示例:
class ApplicationDataModel {
private Flag current = Flag.RW;
public void setData(ApplicationData data) {
current = Flag.RO;
setDataImpl(data);
notifyObservers();
current = Flag.RW;
}
public void reaction(Event e) {
if (flag = Flag.RO) return;
...
}
}
注意标记,不要忘记线程化。如果你从另一个线程调用setData,那么你就有麻烦了。当然了。ApplicationData
对象的提取必须在不同的线程中运行;)。一般来说,重新考虑应用程序的设计。
https://stackoverflow.com/questions/176150
复制相似问题