2

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

プログラムで生成されたイベントを除外するにはどうすればよいですか?

4

2 に答える 2

1

次のメソッドを使用しますgetItemSelectable() イベントの発信元を返します。 ドキュメンテーション

ItemSelectable itemOrginator = e.getItemSelectable()

itemOrginatorは、イベントのオブジェクト ソースです。

クラスから継承されたメソッドint userOriginTypeint progOriginTypeusingメソッドの両方のケースをチェックします。getIDjava.awt.AWTEvent

于 2012-12-05T19:08:22.427 に答える