「ユーザー アクティビティ」をログに記録したい。コンボボックスの選択された値が変更されたというユーザーが発生したイベントをログに記録するのに苦労しています(アプリケーションの呼び出し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ことを望んでいたブールフィールド も見つけました。truecomboBox.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印刷されることはありません。
プログラムで生成されたイベントを除外するにはどうすればよいですか?