[JavaFX]ComboBoxサンプル

java

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) {
  }  
}

コメント