Enum定数を選択するJRadioButtonのButtonGroupやJComboBoxを作成する
Total: 604
, Today: 1
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
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
、JRadioButton
enum
定数の名前をボタンのアクションコマンドに設定し、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()); } });
JSpinner
TabPlacement.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()); } });