10.2 チェックメニュー
10.2.1 選択可能なメニュー項目
AbstractButton は setSelected() メソッドを使ってボタンを選択状態に設定することができます。しかし、MenuItem メニュー項目は 2 状態ボタンではないので、選択状態を維持することができません。JCheckBox クラスのような働きをするメニュー項目を実現するには javax.swing.JCheckBoxMenuItem クラスを使います。
java.lang.Object | +--java.awt.Component | +--java.awt.Container | +--javax.swing.JComponent | +--javax.swing.AbstractButton | +--javax.swing.JMenuItem | +--javax.swing.JCheckBoxMenuItem
public class JCheckBoxMenuItem extends JMenuItem implements SwingConstants, Accessible
JCheckBoxMenuItem クラスは、チェックボックスがメニュー項目に付属し、項目を選択すると選択状態が反転します。選択状態は AbstractButton クラスのメソッドから制御することができます。
コンストラクタ | 解説 |
---|---|
public JCheckBoxMenuItem() | テキストおよびアイコンなしの JCheckBoxMenuItem を生成する。 |
public JCheckBoxMenuItem(Icon icon) | アイコン付きの JCheckBoxMenuItem を生成する。 |
public JCheckBoxMenuItem(String text) | テキスト付きの JCheckBoxMenuItem を生成する。 |
public JCheckBoxMenuItem(Action a) | Action からプロパティを取得する JCheckBoxMenuItem を生成する。 |
public JCheckBoxMenuItem(String text, Icon icon) | テキストおよびアイコン付きの JCheckBoxMenuItem を生成する。 |
public JCheckBoxMenuItem(String text, boolean b) | テキストおよび選択状態を持つ JCheckBoxMenuItem を生成する。 |
public JCheckBoxMenuItem(String text, Icon icon, boolean b) | テキスト、アイコン、選択状態を持つ JCheckBoxMenuItem を生成する。 |
JCheckBoxMenuItem クラスのコンストラクタは、アイコンと文字列、そして初期の選択状態を設定することができます。このクラスでは、選択状態を設定、または取得する新しいアクセッサメソッド setState() メソッドと getState() メソッドが宣言されています。
public void setState(boolean b)
public boolean getState()
これらのメソッドの働きは、AbstractButton クラスの setSelected() と isSelected() メソッドと同じです。setState() と getState() メソッドは、他のコンポーネントセットとの互換性のために用意されたもので、通常は AbstractButton クラスのメソッドを使うことが推奨されています。
import javax.swing.*; public class Test { public static void main(String args[]) { JMenuBar menuBar = new JMenuBar(); JMenu menu = new JMenu("JMenu"); menu.add(new JCheckBoxMenuItem("JCheckBoxMenuItem 1")); menu.addSeparator(); ButtonGroup group = new ButtonGroup(); for(int i = 2 ; i < 5 ; i++) { String text = "JCheckBoxMenuItem " + i; group.add(menu.add(new JCheckBoxMenuItem(text))); } menuBar.add(menu); JFrame win = new JFrame(); win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); win.setBounds(10 , 10 , 400 , 300); win.getRootPane().setJMenuBar(menuBar); win.show(); } }
コード1は、チェックボックスに対応したメニュー項目をメニューに追加して表示してます。JCheckBoxMenuItem 1 は、単独のチェックメニューとして追加していますが、セパレータ以降の 3 つのチェックメニューは、グループとして管理されています。JCHeckBoxMenuItem クラスは AbstractButton クラスを継承しているため、ButtonGroup クラスで管理することができるのです。