JavaFX ListView
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); } }