libro
www.tuyano.com
初心者のためのJavaFXプログラミング入門

主なコントロールの利用 (4/5)

作成:2014-11-29 10:19
更新:2014-11-29 10:19

■コンボボックスについて

複数の項目から1つを選択するGUIは、他にもあります。その代表は「コンボボックス」でしょう。これはjavafx.scene.controlパッケージの「ComboBox」というクラスとして用意されています。
new ComboBox()
new ComboBox(
表示内容 )

コンボボックスは、プルダウンメニューのようにして項目を表示します。ということは、あらかじめメニューとして表示する内容を設定しておく必要があります。new ComboBoxの際、表示内容を引数に渡すことで、その内容をメニューとして表示するようになります。

問題は、「表示内容をどのように用意するか」でしょう。これは、javafx.collectionsパッケージの「ObservableList」インスタンスとして用意する必要があります。

このインスタンスの作成にはいくつか方法がありますが、もっともわかりやすいのは、javafx.collectionsパッケージの「FXCollections」クラスにあるメソッドを利用する方法でしょう。
ObservableList 変数 = FXCollections.observableArrayList( 値1, 値2, ……);

こんな具合にしてObservableList インスタンスを作成することができます。引数には、メニューとして表示する値を用意します。もっとも一般的なのは、String値を指定して表示させる、というものでしょう。ObservableList は総称型に対応しており、
<<pre[ObservableList <String> 変数 =  FXCollections.observableArrayList(……);
このようにしてインスタンスを作成できます。これをnew ComboBoxの引数に渡せばよいのです。


■ComboBoxで得られる値について
こうして設定された値は、ComboBoxから選択すると以下のように取り出すことができます。
Object 変数 = 《ComboBox》.getValue();
getTextなどではなく、「getValue」である点に注意下さい。取り出されるのは、テキストではありません。選択されたオブジェクトなのです。ObservableList <String>としてデータを用意していればStringが取得されますが、例えばObservableList <Integer>としてデータ設定していたならIntegerが得られるでしょう。


■編集可について
また、ComboBoxは、直接テキストを入力できるように設定することもできます。これには「setEditable」というメソッドを利用します。
《ComboBox》.setEditable(《boolean》);

これでtrueに設定すると、編集可能となり、メニューを選ぶだけでなく直接テキストを入力することもできるようになります。直接入力の場合、getValueで得られるのはStringになります。表示データとしてString以外の値を設定していた場合、メニュー選択とテキスト入力で異なるタイプのインスタンスが
getValueされる、という点に注意して下さい。

では、下のリスト欄に簡単なサンプルを挙げておきましょう。ComboBoxから項目を選ぶと、それをLabelに表示します。ComboBoxsetOnActionでアクションイベントの処理を設定できるため、これを利用して処理をしています。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

package com.tuyano.libro;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;

public class App extends Application {
    Label label;
    ComboBox<String> combo;
    
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        label = new Label("This is JavaFX!");
        ObservableList<String> data = FXCollections.observableArrayList(
                "One","Two","Three"
        );
        combo = new ComboBox<String>(data);
        combo.setOnAction((ActionEvent)->{
            label.setText(combo.getValue());
        });
        BorderPane pane = new BorderPane();
        pane.setTop(label);
        pane.setCenter(combo);
        Scene scene = new Scene(pane, 320, 120);
        stage.setScene(scene);
        stage.show();
    }

}

※関連コンテンツ

「初心者のためのJavaFXプログラミング入門」に戻る