首页  >  文章  >  Java  >  列表视图

列表视图

PHPz
PHPz原创
2024-07-12 20:44:11735浏览

列表视图是一种基本上执行与组合框相同功能的控件,但它允许用户选择单个值或多个值。

下图列出了ListView中常用的几个属性和构造函数。 ListView 被定义为泛型类。泛型类型 T 指定存储在列表视图中的元素的元素类型。

Image description

getSelectionModel() 方法返回 SelectionModel 的实例,其中包含设置选择模式以及获取所选索引和项目的方法。选择模式在两个常量 SelectionMode.MULTIPLESelectionMode.SINGLE 之一中定义,指示是否可以选择单个项目或多个项目。默认值为 SelectionMode.SINGLE。下图(a)显示单个选择,下图(b)和(c)显示多个选择。

Image description

以下语句创建一个包含六个项目的列表视图,并允许进行多项选择。

ObservableList;项目=
FXCollections.observableArrayList("项目 1", "项目 2",
“项目 3”、“项目 4”、“项目 5”、“项目 6”);
ListView; lv = new ListView(items);
lv.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

列表视图中的选择模型具有 selectedItemProperty 属性,它是 Observable 的实例。您可以向该属性添加监听器来处理属性更改,如下所示:

`lv.getSelectionModel().selectedItemProperty().addListener(
新的 InvalidationListener() {
public void invalidated(Observable ov) {
System.out.println("选定的索引:"

  • lv.getSelectionModel().getSelectedIndices()); System.out.println("所选项目:"
  • lv.getSelectionModel().getSelectedItems()); } });`

这个匿名内部类可以使用 lambda 表达式进行简化,如下所示:

`lv.getSelectionModel().selectedItemProperty().addListener(ov -> {
System.out.println("选定的索引:"

  • lv.getSelectionModel().getSelectedIndices()); System.out.println("所选项目:"
  • lv.getSelectionModel().getSelectedItems()); });`

下面的代码提供了一个程序,允许用户在列表视图中选择国家,并在图像视图中显示所选国家的国旗。下图显示了程序的运行示例。

Image description

以下是该计划的主要步骤:

  1. 创建用户界面。 创建一个包含九个国家/地区名称作为选择值的列表视图,并将该列表视图放置在滚动窗格内。将滚动窗格放置在边框窗格的左侧。创建九个图像视图用于显示国家/地区的国旗图像。创建一个流程窗格来保存图像视图,并将该窗格放置在边框窗格的中心。
  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 行)和一个包含九个图像视图的数组,用于显示九个国家的国旗图像(第 18-25 行),顺序与国家数组中的顺序相同。列表视图中的项目来自国家/地区数组(第 29 行)。因此,图像视图数组的索引 0 对应于列表视图中的第一个国家。

列表视图被放置在滚动窗格中(第 36 行),以便当列表中的项目数量超出查看区域时可以滚动。

默认情况下,列表视图的选择模式是单一的。列表视图的选择模式设置为多个(第 31 行),这允许用户在列表视图中选择多个项目。当用户在列表视图中选择国家/地区时,侦听器的处理程序(第 39-44 行)为
执行,它获取所选项目的索引并将其相应的图像视图添加到流程窗格中。

以上是列表视图的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn