awi*_*ied 6 java events swing combobox listeners
我正在基于 Swing 的应用程序中使用组合框,我很难弄清楚如何区分由用户事件生成的 ItemEvent 与由应用程序引起的事件。
例如,假设我有一个组合框“ combo
”,并且我正在使用我的 ItemListener“ listener
”侦听 itemStateChanged 事件。当用户将选择更改为第 2 项或我执行该行(伪代码)时:
combo.setSelection(2)
.. 似乎我无法区分这些事件。
也就是说,我无论如何都不是 Swing 专家,所以我想我会问。
谢谢!
作用和反应定律非常清楚:)。如果您尝试对更改做出反应,则无需区分用户和应用程序。我可以想象只有一个用例需要“区分”。应用程序显示一些数据的情况。在这种情况下,您可能拥有适用于您的应用程序的数据模型。该模型中还有一些更改侦听器,应用程序 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;
...
}
}
Run Code Online (Sandbox Code Playgroud)
小心标记,不要忘记线程。如果您从另一个线程调用 setData,那么 EDT 就会遇到麻烦。当然。对象的提取ApplicationData
必须在不同的线程中运行;)。一般来说,重新考虑应用程序的设计。
归档时间: |
|
查看次数: |
1658 次 |
最近记录: |