ComboBoxコントロールの簡単なサンプル。
NetBeans IDE で新規プロジェクト Combosampleを JavaFX FXMLアプリケーションで作ります。
FXML名は、combosample。
プロジェクトを作成した後、combosampleContoroller.java を CombosampleContoroller.javaにリファクタリングしておきます。
Scene Builderでcombosample.fxmlを開き、Cotroller class もcombosample.CombosampleControllerに変更しておきます。
プロジェクトが作成されるときに生成されるButton とLabelは、適当に変更します。
FXMLの修正をします。
まずは、Scene Builderでcombosample.fxmlを開いて、ComboBoxコントロールを追加します。
ComboBox を追加した直後、combosample.fxmlを見ると以下のような感じ。
<ComboBox layoutX="36.0" layoutY="50.0" prefWidth="150.0" />
ここに項目をするため、今度は、エディタでcombosample.fxml を開いて編集します。で、追加した後の状態がこちら。
<ComboBox layoutX="36.0" layoutY="50.0" prefWidth="150.0" > <items> <FXCollections fx:factory="observableArrayList"> <String fx:value="項目1" /> <String fx:value="項目2" /> <String fx:value="項目3" /> <String fx:value="項目4" /> <String fx:value="項目5" /> </FXCollections> </items> </ComboBox>
この状態だと、FXCollections がわからんといって叱られますので
<?import javafx.collections.FXCollections?>
を追加します。
後々、String も知らんとかいわれるので、合わせて
<?import java.lang.String?>
も追加しておきます。
ということで、combosample.fxmlのソース。
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.Button?> <?import javafx.scene.control.ComboBox?> <?import javafx.scene.control.Label?> <?import javafx.scene.layout.AnchorPane?> <?import java.lang.String?> <?import javafx.collections.FXCollections?> <AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.111" fx:controller="combosample.CombosampleController"> <children> <Button fx:id="button" layoutX="211.0" layoutY="50.0" onAction="#handleButtonAction" text="値の取得" /> <Label fx:id="label" layoutX="36.0" layoutY="129.0" minHeight="16" minWidth="69" prefHeight="16.0" prefWidth="175.0" text="ここに表示" /> <ComboBox layoutX="36.0" layoutY="50.0" prefWidth="150.0" > <items> <FXCollections fx:factory="observableArrayList"> <String fx:value="項目1" /> <String fx:value="項目2" /> <String fx:value="項目3" /> <String fx:value="項目4" /> <String fx:value="項目5" /> </FXCollections> </items> </ComboBox> </children> </AnchorPane>
Scene Builder で見ると、こんな感じです。

次に、CombosampleContoroller.java を開いて以下を追加します。
@FXML private ComboBox<String> combobox;
Scene Builder でComboBox を選択して、fx:id にcomboboxを設定します。

ボタンが押されたときの処理メソッドでComboBoxの値を取得します。
NetBeans IDE で作成されたボタンとメソッドをそのまま使った場合、handleButtonAction内に
String value = combobox.getValue(); // ComboBoxから値を取得 label.setText(value); // 取得した値を画面に表示
を追加します。
動かしてみて、項目を選択します。

ボタンを押すと、

のようになります。
Combosample.java
/* * ComboBoxサンプル */ package combosample; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; /** */ public class Combosample extends Application { @Override public void start(Stage stage) throws Exception { Parent root = FXMLLoader.load(getClass().getResource("combosample.fxml")); Scene scene = new Scene(root); stage.setScene(scene); stage.show(); } /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } } [/java] CombosampleController.java /* * ComboBoxサンプル コントローラー */ package combosample; import java.net.URL; import java.util.ResourceBundle; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.ComboBox; import javafx.scene.control.Label; /** * */ public class CombosampleController implements Initializable { @FXML private ComboBox<String> combobox; @FXML private Label label; @FXML private void handleButtonAction(ActionEvent event) { String value = combobox.getValue(); label.setText(value); } @Override public void initialize(URL url, ResourceBundle rb) { } }
コメント