ItemListenerからItemSelectableを実装するコンポーネントを取得する
Total: 237
, Today: 1
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
ItemListener
からこれを設定したItemSelectable
を実装する元コンポーネントや、選択アイテムなどを取得するテストを実行します。
Screenshot
Advertisement
サンプルコード
ItemListener listener = e -> {
Object item = e.getItem();
ItemSelectable selectable = e.getItemSelectable();
Object[] objects = selectable.getSelectedObjects();
if (e.getStateChange() == ItemEvent.SELECTED) {
log.append("Item: " + item + "\n");
log.append("ItemSelectable: " + selectable.getClass().getName() + "\n");
}
log.append("SelectedObjects:");
if (objects != null) {
Arrays.stream(objects).forEach(o -> {
String str = Objects.toString(o);
if (o instanceof AbstractButton) {
str = ((AbstractButton) o).getText();
}
log.append(" " + str);
});
}
log.append("\n----\n");
};
View in GitHub: Java, Kotlin解説
- ItemEvent#getItem()
- 選択状態が変化したアイテムを返す
JRadioButton
やJCheckBox
、JToggleButton
などのAbstractButton
ではイベント発生元のコンポーネント自体(ItemEvent#getItemSelectable()
と同じ)が返されるJComboBox
ではComboBoxModel#getSelectedItem()
で取得可能なアイテムが返される
- ItemEvent (Java Platform SE 8 )
- イベント発生元の
ItemSelectable
コンポーネントオブジェクトを返す EventObject#getSource()
で取得可能なオブジェクトと同一
- イベント発生元の
- ItemSelectable#getSelectedObjects()
- 選択されたアイテム、またはアイテムが選択されていない場合は
null
を返す ItemSelectable
を実装するコンポーネントで複数選択可能なのはjava.awt.List
のみ?なので、それ以外のコンポーネントではItemEvent#getItem()
で取得可能なアイテムひとつのオブジェクト配列が返されるjavax.swing.JList
はItemSelectable
を実装せず、ItemListener
は利用不可
ButtonGroup
に追加したJRadioButton
でも選択可能なボタンはひとつのみなので複数選択アイテムが返されることはない- 上記のサンプルでは同一の親
JPanel
に配置されたJCheckBox
を検索して選択状態のボタン配列を返すようJCheckBox#getSelectedObjects()
をオーバーライド - JComboBoxのアイテムとして表示したJCheckBoxを複数選択するを利用して
JComboBox
を複数選択可能に変更し、選択アイテムをオブジェクト配列として返すようJCheckBox#getSelectedObjects()
をオーバーライド- アイテムが選択されていない場合は
null
ではなく空配列を返すよう変更
- アイテムが選択されていない場合は
- 選択されたアイテム、またはアイテムが選択されていない場合は
@Override public Object[] getSelectedObjects() {
ListModel<E> model = getModel();
return IntStream.range(0, model.getSize())
.mapToObj(model::getElementAt)
.filter(CheckItem::isSelected)
.toArray();
}
参考リンク
- ItemEvent (Java Platform SE 8)
- ItemSelectable (Java Platform SE 8)
- ItemListenerとActionListenerの動作の違いを比較する
- JComboBoxのアイテムとして表示したJCheckBoxを複数選択する
- ButtonModel#getGroup() (Java SE 10 & JDK 10)