Swing/EnumInputSelect のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/EnumInputSelect へ行く。
- category: swing folder: EnumInputSelect title: Enum定数を選択するJRadioButtonのButtonGroupやJComboBoxを作成する tags: [JRadioButton, JRadioButtonMenuItem, JComboBox, JSpinner] author: aterai pubdate: 2023-05-01T04:13:48+09:00 description: Enum定数の一覧からJRadioButtonのButtonGroupやJComboBox、JSpinnerなどの選択コンポーネントを作成し、指定したenum定数を取得します。 image: https://drive.google.com/uc?id=1rClNFi7Ho6S142h4FccGE2d0RYNZyKhA
概要
Enum定数の一覧からJRadioButtonのButtonGroupやJComboBox、JSpinnerなどの選択コンポーネントを作成し、指定したenum定数を取得します。
Screenshot

Advertisement
サンプルコード
enum TabPlacement {
TOP(SwingConstants.TOP),
LEFT(SwingConstants.LEFT),
BOTTOM(SwingConstants.BOTTOM),
RIGHT(SwingConstants.RIGHT);
private final int placement;
TabPlacement(int placement) {
this.placement = placement;
}
public int getPlacement() {
return placement;
}
}
// ...
JTabbedPane tabs3 = makeTabbedPane();
JComboBox<TabPlacement> combo = new JComboBox<>(TabPlacement.values());
combo.addItemListener(e -> {
Object o = e.getItem();
if (e.getStateChange() == ItemEvent.SELECTED && o instanceof TabPlacement) {
tabs3.setTabPlacement(((TabPlacement) o).getPlacement());
}
});
View in GitHub: Java, Kotlin解説
JTabbedPaneのタブ配置を設定する定数を置き換えるEnum列挙型のTabPlacementを作成TabPlacement.values()で定数一覧を取得し以下のような選択コンポーネントを作成- これらの選択コンポーネントで指定された
enum定数から取得した元のint定数をJTabbedPane#setTabPlacement(int)に適用してJTabbedPaneのタブ配置を変更可能
JRadioButtonMenuItem、JRadioButtonenum定数の名前をボタンのアクションコマンドに設定し、ItemListenerで選択されたボタンのアクションコマンドを取得してTabPlacement.valueOf(...)で対応するenum定数を取得JTabbedPane tabs1 = makeTabbedPane(); JMenu menu = new JMenu("JMenu"); ButtonGroup bg1 = new ButtonGroup(); ItemListener handler1 = e -> { if (e.getStateChange() == ItemEvent.SELECTED) { String name = bg1.getSelection().getActionCommand(); tabs1.setTabPlacement(TabPlacement.valueOf(name).getPlacement()); } }; Arrays.asList(TabPlacement.values()).forEach(tp -> { String name = tp.name(); boolean selected = tp == TabPlacement.TOP; JMenuItem item = new JRadioButtonMenuItem(name, selected); item.addItemListener(handler1); item.setActionCommand(name); menu.add(item); bg1.add(item); });
JComboBox<TabPlacement>TabPlacement.values()で取得した定数配列からComboBoxModel<TabPlacement>を作成してJComboBox<TabPlacement>を作成JComboBox<TabPlacement>にItemListenerを設定し、ItemEvent#getItem()でenum定数を取得JRadioButtonのサンプルと同様にenum定数の名前をItemEvent#getItem()#toString()で取得し、TabPlacement.valueOf(...)で対応するenum定数を取得する方法もある- 選択インデックスから
JComboBox<TabPlacement>#getItemAt(idx)で直接enum定数を取得する方法もあるJComboBox<TabPlacement> combo = new JComboBox<>(TabPlacement.values()); combo.addItemListener(e -> { if (e.getStateChange() == ItemEvent.SELECTED) { // String n = e.getItem().toString(); // tabs3.setTabPlacement(TabPlacement.valueOf(n).getPlacement()); int idx = combo.getSelectedIndex(); tabs3.setTabPlacement(combo.getItemAt(idx).getPlacement()); } });
JSpinnerTabPlacement.values()で取得した定数配列からSpinnerListModelを作成してJSpinnerを作成JSpinnerにChangeListenerを設定し、SpinnerListModel#getValue()でenum定数を取得JTabbedPane tabs4 = makeTabbedPane(); SpinnerListModel model4 = new SpinnerListModel(TabPlacement.values()); JSpinner spinner = new JSpinner(model4) { @Override public Object getNextValue() { return super.getPreviousValue(); } @Override public Object getPreviousValue() { return super.getNextValue(); } }; spinner.addChangeListener(e -> { Object o = model4.getValue(); if (o instanceof TabPlacement) { tabs4.setTabPlacement(((TabPlacement) o).getPlacement()); } });