リストビュー

PHPz
リリース: 2024-07-12 20:44:11
オリジナル
802 人が閲覧しました

リスト ビューは、基本的にコンボ ボックスと同じ機能を実行するコントロールですが、ユーザーは単一の値または複数の値を選択できます。

下の図は、ListView で頻繁に使用されるいくつかのプロパティとコンストラクターをリストしています。 ListView はジェネリック クラスとして定義されています。ジェネリック型 T は、リスト ビューに格納される要素の要素型を指定します。

Image description

getSelectionModel() メソッドは、選択モードを設定し、選択されたインデックスと項目を取得するためのメソッドが含まれる SelectionModel のインスタンスを返します。選択モードは、2 つの定数 SelectionMode.MULTIPLE および SelectionMode.SINGLE のいずれかで定義され、単一の項目を選択できるか複数の項目を選択できるかを示します。デフォルト値は SelectionMode.SINGLE です。下の図 (a) は 1 つの選択を示し、下の図 (b) と (c) は複数の選択を示します。

Image description

次のステートメントは、複数選択が可能な 6 つの項目のリスト ビューを作成します。

ObservableListアイテム =
FXCollections.observableArrayList("アイテム 1", "アイテム 2",
"アイテム 3"、"アイテム 4"、"アイテム 5"、"アイテム 6");
ListView lv = 新しい ListView<>(アイテム);
lv.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

リスト ビューの選択モデルには、Observable のインスタンスである selectedItemProperty プロパティがあります。次のように、プロパティの変更を処理するためにこのプロパティにリスナーを追加できます。

`lv.getSelectionModel().selectedItemProperty().addListener(
new InvalidationListener() {
public void validated(Observable ov) {
System.out.println("選択されたインデックス: "

  • lv.getSelectionModel().getSelectedIndices()); System.out.println("選択されたアイテム: "
  • lv.getSelectionModel().getSelectedItems()); } });`

この匿名内部クラスは、次のようにラムダ式を使用して簡略化できます。

`lv.getSelectionModel().selectedItemProperty().addListener(ov -> {
System.out.println("選択されたインデックス: "

  • lv.getSelectionModel().getSelectedIndices()); System.out.println("選択されたアイテム: "
  • lv.getSelectionModel().getSelectedItems()); });`

以下のコードは、ユーザーがリスト ビューで国を選択し、選択した国の国旗を画像ビューに表示できるようにするプログラムを提供します。以下の図は、プログラムの実行例を示しています。

Image description

プログラムの主な手順は次のとおりです:

  1. ユーザーインターフェースを作成します。 9 つの国名を選択値として含むリスト ビューを作成し、スクロール ウィンドウ内にリスト ビューを配置します。スクロール ペインを境界ペインの左側に配置します。国旗の画像を表示するために使用する 9 つの画像ビューを作成します。画像ビューを保持するフロー ペインを作成し、境界ペインの中央にペインを配置します。
  2. イベントを処理します。 InvalidationListener インターフェースで invalidated メソッドを実装するリスナーを作成し、選択した国の国旗画像ビューをペインに配置します。
package application;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.SelectionMode;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.FlowPane;

public class ListViewDemo extends Application {
    // Declare an array of Strings for flag titles
    private String[] flagTitles = {"Canada", "China", "Denmark", "France", "Germany", "India", "Norway", "United Kingdom", "United States of America"};

    // Declare an ImageView array for the national flags of 9 countries
    private ImageView[] ImageViews = {new ImageView("file:/C:/Users/Paul/development/MyJavaFX/src/application/image/ke.jpg"), 
            new ImageView("file:/C:/Users/Paul/development/MyJavaFX/src/application/image/lo.jpg"),
            new ImageView("file:/C:/Users/Paul/development/MyJavaFX/src/application/image/ke.jpg"),
            new ImageView("file:/C:/Users/Paul/development/MyJavaFX/src/application/image/ke.jpg"),
            new ImageView("file:/C:/Users/Paul/development/MyJavaFX/src/application/image/ke.jpg"),
            new ImageView("file:/C:/Users/Paul/development/MyJavaFX/src/application/image/ke.jpg"),
            new ImageView("file:/C:/Users/Paul/development/MyJavaFX/src/application/image/ke.jpg"),
            new ImageView("file:/C:/Users/Paul/development/MyJavaFX/src/application/image/ke.jpg"), new ImageView("file:/C:/Users/Paul/development/MyJavaFX/src/application/image/ke.jpg"),};

    @Override // Override the start method in the Application class
    public void start(Stage primaryStage) {
        ListView<String> lv = new ListView<>(FXCollections.observableArrayList(flagTitles));
        lv.setPrefSize(400, 400);
        lv.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

        // Create a pane to hold image views
        FlowPane imagePane = new FlowPane(10, 10);
        BorderPane pane =  new BorderPane();
        pane.setLeft(new ScrollPane(lv));
        pane.setCenter(imagePane);

        lv.getSelectionModel().selectedIndexProperty().addListener(ov -> {
            imagePane.getChildren().clear();
            for(Integer i: lv.getSelectionModel().getSelectedIndices()) {
                imagePane.getChildren().add(ImageViews[i]);
            }
        });

        // Create a scene and place it in the stage
        Scene scene = new Scene(pane, 450, 170);
        primaryStage.setTitle("ListViewDemo"); // Set the stage title
        primaryStage.setScene(scene); // Place the scene in the stage
        primaryStage.show(); // Display the stage
    }

    public static void main(String[] args) {
        Application.launch(args);
    }
}

ログイン後にコピー

プログラムは、国の文字列の配列 (15 行目) と、9 つの国の国旗画像を表示するための 9 つの画像ビューの配列 (18 ~ 25 行目) を国の配列と同じ順序で作成します。リスト ビューの項目は、国の配列からのものです (行 29)。したがって、画像ビュー配列のインデックス 0 は、リスト ビューの最初の国に対応します。

リスト内の項目の数が表示領域を超えた場合にスクロールできるように、リスト ビューはスクロール ペイン (行 36) に配置されます。

デフォルトでは、リストビューの選択モードは単一です。リスト ビューの選択モードは複数に設定されており (行 31)、これによりユーザーはリスト ビューで複数の項目を選択できるようになります。ユーザーがリスト ビューで国を選択すると、リスナーのハンドラー (39 ~ 44 行目) は
になります。 実行され、選択された項目のインデックスが取得され、対応する画像ビューがフロー ペインに追加されます。

以上がリストビューの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート