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