Enum定数を選択するJRadioButtonのButtonGroupやJComboBoxを作成する
Total: 1018, Today: 1, Yesterday: 0
Posted by aterai at
Last-modified:
Summary
Enum定数の一覧からJRadioButtonのButtonGroupやJComboBox、JSpinnerなどの選択コンポーネントを作成し、指定したenum定数を取得します。
Screenshot

Advertisement
Source Code Examples
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, KotlinDescription
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()); } });