Swing/ItemListenerActionListener の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/ItemListenerActionListener へ行く。
- Swing/ItemListenerActionListener の差分を削除
--- category: swing folder: ItemListenerActionListener title: ItemListenerとActionListenerの動作の違いを比較する tags: [ItemListener, ActionListener, JComboBox, JCheckBox, JRadioButton, ButtonGroup] author: aterai pubdate: 2018-04-23T18:28:12+09:00 description: JComboBoxやJCheckBoxなどに設定したItemListenerとActionListenerの動作を比較テストします。 image: https://drive.google.com/uc?id=1xpBmSl-frNjI1eCiUe2pzY2vo6Zp_FpKjA --- * 概要 [#summary] `JComboBox`や`JCheckBox`などに設定した`ItemListener`と`ActionListener`の動作を比較テストします。 #download(https://drive.google.com/uc?id=1xpBmSl-frNjI1eCiUe2pzY2vo6Zp_FpKjA) * サンプルコード [#sourcecode] #code(link){{ JComboBox<DayOfWeek> combo = new JComboBox<>(DayOfWeek.values()); combo.addItemListener(e -> { ItemSelectable c = e.getItemSelectable(); DayOfWeek dow = (DayOfWeek) e.getItem(); boolean b = e.getStateChange() == ItemEvent.SELECTED; print(textArea, "ItemListener", c.getClass(), b, dow); }); combo.addActionListener(e -> { Object c = e.getSource(); DayOfWeek dow = combo.getItemAt(combo.getSelectedIndex()); boolean b = Objects.equals("comboBoxChanged", e.getActionCommand()); print(textArea, "ActionListener", c.getClass(), b, dow); }); }} * 解説 [#explanation] `JComboBox` - `ItemListener` -- `ItemEvent#getItemSelectable()`でイベント元の`JComboBox`が取得可能 -- `ItemEvent#getItem()`で`JComboBox`で選択されたアイテムが取得可能 -- `ItemEvent#getStateChange()`で`JComboBox`のアイテムが選択、選択解除されたかを取得可能 -- `JComboBox#setSelectedIndex(...)`メソッドなどを使用して`JComboBox`を直接マウスやキー入力で操作しなくても`ItemEvent`は発生する -- `JComboBox`の同じアイテムを選択しても`ItemEvent`は発生しない - `ActionListener` -- `ActionEvent#getSource()`でイベント元の`JComboBox`が取得可能 -- デフォルトの`JComboBox`は`ActionEvent#getActionCommand()`で`comboBoxChanged`を返す -- `JComboBox#setSelectedIndex(...)`メソッドなどを使用して`JComboBox`を直接マウスやキー入力で操作しなくても、`ActionEvent`は発生する -- `JComboBox`の同じアイテムを選択しても`ActionEvent`は発生する `JCheckBox` - `ItemListener` -- `ItemEvent#getItemSelectable()`、または`ItemEvent#getItem()`でイベント元の`JCheckBox`が取得可能 -- `ItemEvent#getStateChange()`で`JCheckBox`が選択されたかを取得可能 -- `JCheckBox#setSelected(...)`メソッドなどを使用して`JCheckBox`を直接マウスやキー入力で操作しなくても`ItemEvent`は発生する -- `JCheckBox#setSelected(...)`メソッドを使用しても選択状態が変化しない場合、`ItemEvent`は発生しない - `ActionListener` -- `ActionEvent#getSource()`でイベント元の`JCheckBox`が取得可能 -- デフォルトの`JCheckBox`は`ActionEvent#getActionCommand()`で`JCheckBox#getText()`と同じ値を返す -- `JCheckBox#setSelected(...)`メソッドなどを使用して`JCheckBox`の状態を変更しても、`ActionEvent`は発生しない `JRadioButton`(`ButtonGroup`) - `ItemListener` -- `ItemEvent#getItemSelectable()`、または`ItemEvent#getItem()`でイベント元の`JCheckBox`が取得可能 -- `ItemEvent#getStateChange()`で`JRadioButton`が選択されたかを取得可能 -- `JRadioButton#setSelected(...)`メソッドなどを使用して`JRadioButton`を直接マウスやキー入力で操作しなくても、`ItemEvent`は発生する -- `JRadioButton#setSelected(...)`メソッドを使用しても選択状態が変化しない場合、`ItemEvent`は発生しない -- 注: `ButtonGroup#getSelection()`は`JRadioButton#setSelected(...)`メソッドを使用して選択変更した場合は`null`、マウスなどで選択変更した場合はその`ButtonModel`を返す -- `ButtonGroup#getSelection()`は`JRadioButton#setSelected(...)`メソッドを使用して選択変更した場合は`null`、マウスなどで選択変更した場合はその`ButtonModel`を返す - `ActionListener` -- `ActionEvent#getSource()`でイベント元の`JRadioButton`が取得可能 -- デフォルトの`JRadioButton`は`ActionEvent#getActionCommand()`で`JRadioButton#getText()`と同じ値を返す -- `JRadioButton#setSelected(...)`メソッドなどを使用して`JRadioButton`の状態を変更しても`ActionEvent`は発生しない * 参考リンク [#reference] - [https://stackoverflow.com/questions/9882845/jcheckbox-actionlistener-and-itemlistener java - JCheckbox - ActionListener and ItemListener? - Stack Overflow] * コメント [#comment] #comment #comment