清單視圖是一種基本上執行與組合框相同功能的控件,但它允許使用者選擇單一值或多個值。
下圖列出了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中文網其他相關文章!