JavaFXでメニューに単一項目のみ選択可能なアイテムを作成・イベントを登録する方法について記載します。
目次
選択可能なアイテムを作成・イベントを登録する方法
単一項目のみ選択可能なアイテムを作成するには、RadioMenuItemクラス を使用します。
実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.Menu; import javafx.scene.control.MenuBar; import javafx.scene.control.RadioMenuItem; import javafx.scene.control.ToggleGroup; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class Main extends Application { // イベント実行時のメッセージ表示用ラベル final Label lblMessage = new Label(); @Override public void start(Stage pStage) { /* メニュー -------------------- */ ToggleGroup menuGroup = new ToggleGroup(); Menu menu = new Menu("ラジオメニュー"); RadioMenuItem menuItem1 = new RadioMenuItem ("radio-item1"); menuItem1.setToggleGroup(menuGroup); // グループの設定 menuItem1.setOnAction(new ItemEvent()); // イベントを設定 RadioMenuItem menuItem2 = new RadioMenuItem ("radio-item2"); menuItem2.setToggleGroup(menuGroup); // グループの設定 menuItem2.setOnAction(new ItemEvent()); // イベントを設定 RadioMenuItem menuItem3 = new RadioMenuItem ("radio-item3"); menuItem3.setToggleGroup(menuGroup); // グループの設定 menuItem3.setOnAction(new ItemEvent()); // イベントを設定 menu.getItems().addAll( menuItem1, menuItem2, menuItem3 ); /* ---------------------------- */ /* メニューバーを作成・メニューを追加 */ MenuBar menuBar = new MenuBar(); menuBar.getMenus().addAll( menu ); /* ラベルの設定 */ lblMessage.setAlignment(Pos.CENTER); /* 配置 */ VBox vbMessage = new VBox(); vbMessage.setMinHeight(250); vbMessage.setAlignment(Pos.CENTER); vbMessage.getChildren().addAll(lblMessage); VBox root = new VBox(); root.getChildren().addAll(menuBar,vbMessage); pStage.setTitle("CheckMenuItem"); pStage.setWidth(400); pStage.setHeight(300); pStage.setScene(new Scene(root)); pStage.show(); } // EventHandlerインタフェースを実装したクラス class ItemEvent implements EventHandler<ActionEvent> { @Override public void handle(ActionEvent event) { // イベント発生元のオブジェクトを取得 RadioMenuItem mitem = (RadioMenuItem)event.getTarget(); // ラベルにアイテム名を表示 lblMessage.setText( mitem.getText() + ":チェックON" ); } } public static void main(String[] args){ Application.launch(args); } } |
1. 選択可能なアイテムの作成
選択可能なメニューを作成するには、RadioMenuItemクラスのインスタンスを作成します。
RadioMenuItem menuItem1 = new RadioMenuItem (“ラベル名”);
2. グループの作成
RadioMenuItemクラスのインスタンスを作成しただけでは、複数あるアイテムのうち1つのみ選択することが出来ません。
1つのみ選択できるようにするには、複数アイテムをまとめるグループ(ToggleGroup)を作成し、アイテムをグループに登録します。
1 2 3 4 5 6 7 8 |
// グループを作成 ToggleGroup menuGroup = new ToggleGroup(); // RadioMenuItemのインスタンスを生成 RadioMenuItem menuItem1 = new RadioMenuItem ("radio-item1"); // アイテムをグループに設定する menuItem1.setToggleGroup(menuGroup); |
3. アイテムにイベントを登録
アイテムクリック時のイベントを登録するには、setOnActionメソッドを使用します。
イベント用の独自クラスでは、EventHandler<ActionEvent>インタフェースを実装する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// EventHandlerインタフェースを実装したクラス class ItemEvent implements EventHandler<ActionEvent> { @Override public void handle(ActionEvent event) { // イベント発生元のオブジェクトを取得 RadioMenuItem mitem = (RadioMenuItem)event.getTarget(); // ラベルにアイテム名を表示 lblMessage.setText( mitem.getText() + ":チェックON" ); } } |
4. その他のメニュー
単一項目選択可能なメニューの他に、複数項目選択可能なアイテムや、選択不可なアイテムをもつメニューを作成することが出来ます。
詳細は以下のリンクを参照してください。
複数項目チェック可能なアイテムをもつメニュー
メニューに複数選択可能なアイテムを作成・イベントを登録する方法
選択不可なアイテムをもつメニュー
メニューの基本的な作成方法(選択不可アイテムなど)