首頁  >  文章  >  Java  >  清單視圖

清單視圖

PHPz
PHPz原創
2024-07-12 20:44:11701瀏覽

清單視圖是一種基本上執行與組合框相同功能的控件,但它允許使用者選擇單一值或多個值。

下圖列出了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