• 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

概要

JComboBoxJCheckBoxなどに設定したItemListenerActionListenerの動作を比較テストします。

サンプルコード

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);
});
View in GitHub: Java, Kotlin

解説

  • 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を返す
    • ActionListener
      • ActionEvent#getSource()でイベント元のJRadioButtonが取得可能
      • デフォルトのJRadioButtonは、ActionEvent#getActionCommand()JRadioButton#getText()と同じ値を返す
      • JRadioButton#setSelected(...)メソッドなどを使用してJRadioButtonの状態を変更しても、ActionEventは発生しない

参考リンク

コメント