我想从不应该触发更改事件的代码更新GUI元素(JComboBox
,JLabel
等)。是否可以从java.awt.event.ActionEvent
或java.awt.event.ItemEvent
找出更改是由用户引起还是运行此类代码?
combo.setSelectedItem("my item")
答案 0 :(得分:1)
答案是:不。
但在某些情况下,您可以尝试分析当前的InputEvent
。要获得它,请使用EventQueue.getCurrentEvent()
。例如,如果用户在单击另一个组件时触发了更改,则可以比较输入事件的组件和操作事件的组件(确定我知道:它不安全。但在某些情况下,它可以帮助避免增加应用程序复杂性)。
答案 1 :(得分:0)
对于按钮,您可以获取事件修饰符:
int buttonModifiers = evt.getModifiers();
如果通过调用doClick()
生成按钮事件,则修饰符为0,否则不为。
顺便说一句,通过使用evt.toString()
进行记录/打印,您可以相对轻松地找到这些差异