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

