2

特に以下のコード例では、ItemEventオブジェクトの次のメソッドの違いをよく理解していません。

Object getItem()クラスItemEventから、Java-API:

イベントの影響を受けるアイテムを返します。

ItemSelectable getItemSelectable()クラスItemEventから、Java-API:

イベントの発信者を返します。

Object getSource()クラスEventObject、Java-APIから継承:

イベントが最初に発生したオブジェクトを返します。

私が知っているのは、 。getItemSelectable()のようなメソッドを使用するために明示的にキャストする必要がないため、オブジェクトの取得が簡単になることですgetText()。(したがって、(JCheckBox)2番目のコマンドのキャストprintlnは必要ありません。)そして、私は知っています、それはをgetItemSelectable()使用しますgetSource()しかし、なぜ別のものがあるのgetItem()ですか?

ただし、以下の例では、これらの方法の違いは示されていません。

JCheckBox cb = new JCheckBox("text of checkbox", true);

ItemListener myListener = new ItemListener()
    {
        @Override
        public void itemStateChanged(ItemEvent e)
        {
            System.out.println(((JCheckBox) e.getItem()).getText());
            System.out.println(((JCheckBox) e.getSource()).getText());
            System.out.println(((JCheckBox) e.getItemSelectable()).getText());
        }
    };

cb.addItemListener(myListener);

出力:

チェックボックスのテキスト

チェックボックスのテキスト

チェックボックスのテキスト

では、正確な違いは何ですか?いつどの関数を使用しますか?

編集:たぶん違いはありません、少なくとも概念的な違いはありません(リターンタイプと元のクラスを除いて)?

4

2 に答える 2

1

ItemEventコンストラクターの定義を見てみると:

 /**
 * Constructs an <code>ItemEvent</code> object.
 * <p> This method throws an
 * <code>IllegalArgumentException</code> if <code>source</code>
 * is <code>null</code>.
 *
 * @param source The <code>ItemSelectable</code> object
 *               that originated the event
 * @param id           The integer that identifies the event type.
 *                     For information on allowable values, see
 *                     the class description for {@link ItemEvent}
 * @param item   An object -- the item affected by the event
 * @param stateChange  An integer that indicates whether the item was
 *               selected or deselected.
 *                     For information on allowable values, see
 *                     the class description for {@link ItemEvent}
 * @throws IllegalArgumentException if <code>source</code> is null
 * @see #getItemSelectable()
 * @see #getID()
 * @see #getStateChange()
 */
public ItemEvent(ItemSelectable source, int id, Object item, int stateChange) {
    super(source, id);
    this.item = item;
    this.stateChange = stateChange;
}

パラメータは、ItemSelectable sourceによって返される要素ですe.getSource()。パラメータは、Object itemによって返される要素ですe.getItem()

したがって、実際に問題となるのは、コンストラクターがとの異なるオブジェクトで呼び出される場合sourceですitem

JCheckBoxスーパークラス-JToggleButtonとを見るとAbstractButton、ItemEventは常に両方のパラメーターに対して同じオブジェクトで構築されます。したがって、一部のカスタム実装では、これらの異なるメソッドを使用するのが理にかなっています。

于 2012-07-06T17:28:11.690 に答える
0

ここの説明を参照してください... ItemListener

于 2012-07-06T15:47:21.477 に答える