はしくれエンジニアもどきのメモ

情報系技術・哲学・デザインなどの勉強メモ・備忘録です。

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)->{
  // まとめて処理
});

参考:Node (JavaFX 8)

ラベル(Label)

Labelクラスを使用。 ラベルとして編集不可のテキストを生成。


import javafx.scene.control.Label;

Label label = new Label("ラベル");

画面上でのLabel

参考:Label (JavaFX 8)

ボタン(Button)

Buttonクラスを使用。 Stringを渡すことで、ボタンのテキストを設定できる。


import javafx.scene.control.Button;

Button btn = new Button("閉じる");

ボタンがクリックされたときの処理は、 .setOnAcitionメソッドで書ける。 また、ラムダ式で書くと以下のようになる。

Platform.exit()で、JavaFXアプリケーションを終了できる。)


btn.setOnAction((ActionEvent event) -> {
    Platform.exit();
});

画面上でのButton

参考:Button (JavaFX 8)

メニューバー(MenuBar)

アプリケーション上部によくあるメニューバーを作成できる。 MenuBarクラスを使用。

MenuBar は、Menuクラスを追加して構成される。 例えば、「ファイル」、「編集」などのメニューを持つ。

参考:MenuBar (JavaFX 8)

メニュー(Menu)

MenuBar に組み込まれ、メニューは、メニューアイテムを持って構成される。Menuクラスを使用。

引数にString を渡すとメニューのテキストを指定できる。

例えば、「ファイル」メニューであれば、 メニューアイテムとして、「開く」、「閉じる」などを持つ。

参考:Menu (JavaFX 8)

メニューアイテム(MenuItem)

Menu の中に配置される。MenuItemクラスを使用。

引数にString を渡すとメニューアイテムのテキストを指定できる。

実際の処理は、 MenuItemが選択されたときに実行されるようすればよく、 ボタン同様、.setOnActionメソッドが使える。

参考:MenuItem (JavaFX 8)

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);

画面上でのMenuBar, Menu, MenuItem

ラジオボタン(RadioButton)

複数の選択肢から1つを選んでもらいたい場合に使用する(複数選んでいい場合は、チェックボックスを使う)。RadioButtonクラスを使用。

HTML5ラジオボタン(<input type="radio">)とほぼ同じものである。

任意のRadioButton が指定されていることを識別するために、 .setUserData(Object)メソッドでIDを振っておく。

参考:RadioButton (JavaFX 8)

トグルグループ(ToggleGroup)

複数のRadioButton は、ToggleGroup で紐づけを行う。

どのラジオボタンが選択されているかは、 .getSelectedToggle().getUserData() メソッドでUserDataを取得し、 ラジオボタンにset していたUserDataで識別できる。

ToggleGroup は、Paneに追加できないので注意。

参考:ToggleGroup (JavaFX 8)


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();

画面上でのRadioButton

チョイスボックス(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();

ChoiceBox 選択前
ChoiceBox 選択中

参考:ChoiceBox (JavaFX 8)