JavaFX コンポーネントメモ
JavaFX コンポーネントメモ
JavaFX のボタン(Button)などのコンポーネント(一部)の使い方をメモ。
環境
-
Windows 10
-
Java8 (javac 1.8.0_74)
-
コンポーネント(Node)
JavaFXのボタンなどのコンポーネントは、 Nodeクラスを継承して作られている。
Nodeクラスがスーパークラスで、 そのサブクラスにボタンなどの各コンポーネントがあるので、 Nodeクラスで各コンポーネントを宣言しておいて、 Collectionで違う種類のコンポーネントをまとめて処理することもできる。
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
ArrayList<Node> node_list = new ArrayList<>();
node_list.add(new Label("ラベル"));
node_list.add(new Button("ボタン"));
node_list.stream().forEach((Node n)->{
// まとめて処理
});
ラベル(Label)
Labelクラスを使用。 ラベルとして編集不可のテキストを生成。
import javafx.scene.control.Label;
Label label = new Label("ラベル");
ボタン(Button)
Buttonクラスを使用。 Stringを渡すことで、ボタンのテキストを設定できる。
import javafx.scene.control.Button;
Button btn = new Button("閉じる");
ボタンがクリックされたときの処理は、 .setOnAcition
メソッドで書ける。 また、ラムダ式で書くと以下のようになる。
(Platform.exit()
で、JavaFXアプリケーションを終了できる。)
btn.setOnAction((ActionEvent event) -> {
Platform.exit();
});
メニューバー(MenuBar)
アプリケーション上部によくあるメニューバーを作成できる。 MenuBarクラスを使用。
MenuBar は、Menuクラスを追加して構成される。 例えば、「ファイル」、「編集」などのメニューを持つ。
メニュー(Menu)
MenuBar に組み込まれ、メニューは、メニューアイテムを持って構成される。Menuクラスを使用。
引数にString を渡すとメニューのテキストを指定できる。
例えば、「ファイル」メニューであれば、 メニューアイテムとして、「開く」、「閉じる」などを持つ。
メニューアイテム(MenuItem)
Menu の中に配置される。MenuItemクラスを使用。
引数にString を渡すとメニューアイテムのテキストを指定できる。
実際の処理は、 MenuItemが選択されたときに実行されるようすればよく、 ボタン同様、.setOnAction
メソッドが使える。
MenuBar, Menu, MenuItem を使ったサンプルコード。
import javafx.scene.control.MenuBar;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuItem;
MenuBar menubar = new MenuBar();
Menu file_menu = new Menu("ファイル");
Menu edit_menu = new Menu("編集");
Menu help_menu = new Menu("ヘルプ");
MenuItem open = new MenuItem("開く");
open.setOnAction((ActionEvent e)->{
System.out.println("open");
});
MenuItem exit = new MenuItem("終了");
exit.setOnAction((ActionEvent e)->{
System.out.println("exit");
Platform.exit();
});
// MenuにMenuItemを追加
file_menu.getItems().addAll(open, exit);
// MenuBarにMenuを追加
menubar.getMenus().addAll(file_menu, edit_menu, help_menu);
ラジオボタン(RadioButton)
複数の選択肢から1つを選んでもらいたい場合に使用する(複数選んでいい場合は、チェックボックスを使う)。RadioButtonクラスを使用。
HTML5 のラジオボタン(<input type="radio">
)とほぼ同じものである。
任意のRadioButton が指定されていることを識別するために、 .setUserData(Object)
メソッドでIDを振っておく。
トグルグループ(ToggleGroup)
複数のRadioButton は、ToggleGroup で紐づけを行う。
どのラジオボタンが選択されているかは、 .getSelectedToggle().getUserData()
メソッドでUserDataを取得し、 ラジオボタンにset していたUserDataで識別できる。
ToggleGroup は、Paneに追加できないので注意。
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
ToggleGroup toggle_group = new ToggleGroup();
RadioButton first_btn = new RadioButton("select first");
first_btn.setUserData(first_btn.getText());
first_btn.setToggleGroup(toggle_group);
// デフォでこのラジオボタン選択。
first_btn.setSelected(true);
RadioButton second_btn = new RadioButton("select second");
second_btn.setUserData(second_btn.getText());
second_btn.setToggleGroup(toggle_group);
HBox radios = new HBox(10, first_btn, second_btn);
StackPane root = new StackPane();
root.getChildren().add(radios);
// 選択しているラジオボタンの取得
// Stringで取得
String user_data = toggle_group.getSelectedToggle().getUserData().toString();
チョイスボックス(ChoiceBox)
複数項目から1つの項目を選択する。 HTML5でいうところのselect
タグと同じ。 ChoiceBoxクラスを使用。
選択されているindex を取得するするには、 .getSelectionModel().getSelectedIndex()
メソッドで取得できる。
String[] color ={"赤", "緑", "青"};
ChoiceBox choice_box = new ChoiceBox(FXCollections.observableArrayList(color)); // 文字列配列が使えないので、observableListに変換
choice_box.getSelectionModel().selectFirst(); //1番目を選択済み
// indexを取得
int idx = choice_box.getSelectionModel().getSelectedIndex();
参考リンク