如何 select 列表视图中的多个项目 - JavaFX 8
How to select multiple items from a List view - JavaFX 8
我是 JavaFX
的新手,我正在尝试将 ObservableList
添加到 table 视图。
该列表仅包含字符串。
我的目标是显示已连接设备的列表并让用户选择在哪个设备上执行操作(1 个或多个),有没有更好的方法来实现这一点?
编辑:
我已经更改为 ListView,现在它显示了列表,我如何从选定的项目创建一个新列表?
这是一个基于您的评论的示例
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.control.SelectionMode;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
public class ListSelect extends Application {
@Override
public void start(Stage stage) {
ObservableList<String> items = FXCollections.observableArrayList(
"one","two","three","four","five","six","seven");
ListView<String> list = new ListView<>(items);
ListView<String> selected = new ListView<>();
HBox root = new HBox(list, selected);
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
//set this to SINGLE to allow selecting just one item
list.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
list.getSelectionModel().selectedItemProperty().addListener((obs,ov,nv)->{
selected.setItems(list.getSelectionModel().getSelectedItems());
});
}
public static void main(String[] args) {launch(args);}
}
如果您正在寻找不使用 Java 的新 Lamba 和相关功能的解决方案,它是:
在我的示例中,假设 table 设置为与任意 class 人一起工作,该人定义了名字、姓氏和电子邮件。
//Set the table to multi selection mode
table.getSelectionModel().setSelectionMode( SelectionMode.MULTIPLE);
//Regiseter the listener on the ObervableList<Person>
table.getSelectionModel().getSelectedItems().addListener(multiSelection);
/**A listener for list selections, multiple selections in the TableView**/
ListChangeListener< Person> multiSelection = new ListChangeListener<Person>(){
@Override
public void onChanged( ListChangeListener.Change<? extends Person> changed){
for( Person p : changed.getList())
System.out.println(p);
}
};
我是 JavaFX
的新手,我正在尝试将 ObservableList
添加到 table 视图。
该列表仅包含字符串。
我的目标是显示已连接设备的列表并让用户选择在哪个设备上执行操作(1 个或多个),有没有更好的方法来实现这一点?
编辑: 我已经更改为 ListView,现在它显示了列表,我如何从选定的项目创建一个新列表?
这是一个基于您的评论的示例
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.control.SelectionMode;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
public class ListSelect extends Application {
@Override
public void start(Stage stage) {
ObservableList<String> items = FXCollections.observableArrayList(
"one","two","three","four","five","six","seven");
ListView<String> list = new ListView<>(items);
ListView<String> selected = new ListView<>();
HBox root = new HBox(list, selected);
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
//set this to SINGLE to allow selecting just one item
list.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
list.getSelectionModel().selectedItemProperty().addListener((obs,ov,nv)->{
selected.setItems(list.getSelectionModel().getSelectedItems());
});
}
public static void main(String[] args) {launch(args);}
}
如果您正在寻找不使用 Java 的新 Lamba 和相关功能的解决方案,它是:
在我的示例中,假设 table 设置为与任意 class 人一起工作,该人定义了名字、姓氏和电子邮件。
//Set the table to multi selection mode
table.getSelectionModel().setSelectionMode( SelectionMode.MULTIPLE);
//Regiseter the listener on the ObervableList<Person>
table.getSelectionModel().getSelectedItems().addListener(multiSelection);
/**A listener for list selections, multiple selections in the TableView**/
ListChangeListener< Person> multiSelection = new ListChangeListener<Person>(){
@Override
public void onChanged( ListChangeListener.Change<? extends Person> changed){
for( Person p : changed.getList())
System.out.println(p);
}
};