JavaFX ListView

时间:2020-01-09 10:36:38  来源:igfitidea点击:

JavaFX ListView控件使用户可以从预定义的选项列表中选择一个或者多个选项。 JavaFX ListView控件由类javafx.scene.control.ListView表示。这个JavaFX ListView教程将解释如何使用ListView类。

创建一个ListView

我们只需创建ListView类的新实例即可创建ListView。这是一个JavaFXListView实例化示例:

ListView listView = new ListView();

将项目添加到ListView

我们可以通过获取" ListView"的项目集合并将项目(选项)添加到" ListView"中,并向其中添加项目。这是一个将项目添加到JavaFXListView的示例:

listView.getItems().add("Item 1");
listView.getItems().add("Item 2");
listView.getItems().add("Item 3");

将ListView添加到场景图

要使" ListView"可见,必须将其添加到场景图中。这意味着我们必须将" ListView"添加到"场景"对象或者某些布局组件中,然后再将其添加到"场景"对象。

这是一个示例,显示了如何向场景图添加JavaFXListView

package com.Hyman.javafx.controls;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class ListViewExperiments extends Application  {

    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("ListView Experiment 1");

        ListView listView = new ListView();

        listView.getItems().add("Item 1");
        listView.getItems().add("Item 2");
        listView.getItems().add("Item 3");

        HBox hbox = new HBox(listView);

        Scene scene = new Scene(hbox, 300, 120);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

运行此示例得到的应用程序看起来类似于此屏幕截图:

注意默认情况下ListView如何显示多个选项。我们可以为ListView设置高度和宽度,但不能明确设置应显示多少个项目。高度根据显示的每个项目的高度确定。

如果ListView中的项目多于其可见区域,则ListView将添加滚动条,以便用户可以在项目上上下滚动。

读取所选值

我们可以通过ListView的SelectionModel读取选定的索引。这是显示如何读取JavaFXListView的选定索引的示例:

ObservableList selectedIndices =
    listView.getSelectionModel().getSelectedIndices();

" OberservableList"将包含" Integer"对象,这些对象表示" ListView"中所选项目的索引。

这是一个完整的JavaFX示例,其中添加了一个按钮,当单击该按钮时,该按钮读取ListView的选定项:

package com.Hyman.javafx.controls;

import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.scene.control.SelectionMode;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ListViewExperiments extends Application  {

    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("ListView Experiment 1");

        ListView listView = new ListView();

        listView.getItems().add("Item 1");
        listView.getItems().add("Item 2");
        listView.getItems().add("Item 3");

        Button button = new Button("Read Selected Value");

        button.setOnAction(event -> {
            ObservableList selectedIndices = listView.getSelectionModel().getSelectedIndices();

            for(Object o : selectedIndices){
                System.out.println("o = " + o + " (" + o.getClass() + ")");
            }
        });

        VBox vBox = new VBox(listView, button);

        Scene scene = new Scene(vBox, 300, 120);
        primaryStage.setScene(scene);
        primaryStage.show();

    }

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

允许选择多个项目

为了允许在" ListView"中选择多个项目,我们需要在" ListView"选择模型上设置相应的选择模式。这是在JavaFXListView上设置选择模式的示例:

listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

一旦在" ListView"选择模型上设置了" SelectionMode.MULTIPLE",用户就可以通过在选择第一个所选项目之后的其他项目时按住SHIFT或者CTRL的同时在" ListView"中选择多个项目。

这是一个完整的JavaFX示例,显示了如何将ListView设置为多重选择模式,包括一个按钮,当单击该按钮时,它将写出ListView中所选项目的索引:

package com.Hyman.javafx.controls;

import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.scene.control.SelectionMode;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ListViewExperiments extends Application  {

    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("ListView Experiment 1");

        ListView listView = new ListView();

        listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

        listView.getItems().add("Item 1");
        listView.getItems().add("Item 2");
        listView.getItems().add("Item 3");

        Button button = new Button("Read Selected Value");

        button.setOnAction(event -> {
            ObservableList selectedIndices = listView.getSelectionModel().getSelectedIndices();

            for(Object o : selectedIndices){
                System.out.println("o = " + o + " (" + o.getClass() + ")");
            }
        });

        VBox vBox = new VBox(listView, button);

        Scene scene = new Scene(vBox, 300, 120);
        primaryStage.setScene(scene);
        primaryStage.show();

    }

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