列表视图是一种基本上执行与组合框相同功能的控件,但它允许用户选择单个值或多个值。
下图列出了ListView中常用的几个属性和构造函数。 ListView 被定义为泛型类。泛型类型 T 指定存储在列表视图中的元素的元素类型。
getSelectionModel() 方法返回 SelectionModel 的实例,其中包含设置选择模式以及获取所选索引和项目的方法。选择模式在两个常量 SelectionMode.MULTIPLE 和 SelectionMode.SINGLE 之一中定义,指示是否可以选择单个项目或多个项目。默认值为 SelectionMode.SINGLE。下图(a)显示单个选择,下图(b)和(c)显示多个选择。
以下语句创建一个包含六个项目的列表视图,并允许进行多项选择。
ObservableList
FXCollections.observableArrayList("项目 1", "项目 2",
“项目 3”、“项目 4”、“项目 5”、“项目 6”);
ListView
lv.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
列表视图中的选择模型具有 selectedItemProperty 属性,它是 Observable 的实例。您可以向该属性添加监听器来处理属性更改,如下所示:
`lv.getSelectionModel().selectedItemProperty().addListener(
新的 InvalidationListener() {
public void invalidated(Observable ov) {
System.out.println("选定的索引:"
这个匿名内部类可以使用 lambda 表达式进行简化,如下所示:
`lv.getSelectionModel().selectedItemProperty().addListener(ov -> {
System.out.println("选定的索引:"
下面的代码提供了一个程序,允许用户在列表视图中选择国家,并在图像视图中显示所选国家的国旗。下图显示了程序的运行示例。
以下是该计划的主要步骤:
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中文网其他相关文章!