我想记录“用户活动”。我正在努力记录用户触发的事件,即组合框的选定值已更改(由用户更改,而不是由应用程序调用combo.setSelectedItem()
或类似内容更改)。
这是我到目前为止所做的:我注册了ItemListener
一个JComboBox
comboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
log(USER_SELECTED_ITEM, e);
}
}
});
但是,itemStateChanged(...)
即使组合框值由 以编程方式选择,也会调用comboBox.setSelectedItem(...)
。
我还发现了一个布尔字段 ,AWTEvent.isSystemGenerated
我希望它true
是通过显式调用comboBox.setSelectedItem(...)
.
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
boolean sysGen = AWTAccessor.getAWTEventAccessor().isSystemGenerated(e);
System.out.println("system generated: " + sysGen);
}
}
不幸的是,true
从来没有打印出来。
如何过滤掉以编程方式生成的事件?