javafx实现多选功能
时间: 2023-07-14 17:13:54 浏览: 57
在JavaFX中,可以使用ListView或TableView来实现多选功能。以下是使用ListView实现多选的示例代码:
```java
ListView<String> listView = new ListView<>();
listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
ObservableList<String> items = FXCollections.observableArrayList(
"Item 1", "Item 2", "Item 3", "Item 4", "Item 5");
listView.setItems(items);
Button button = new Button("Get Selected Items");
button.setOnAction(e -> {
ObservableList<String> selectedItems = listView.getSelectionModel().getSelectedItems();
System.out.println(selectedItems);
});
VBox vbox = new VBox(listView, button);
Scene scene = new Scene(vbox);
primaryStage.setScene(scene);
primaryStage.show();
```
其中,setSelectionMode(SelectionMode.MULTIPLE)设置ListView的选择模式为多选。在按钮的事件处理程序中,可以通过getSelectedItems()方法获取所有被选择的项。
如果使用TableView,则需要在表格列中添加一个CheckBox来实现多选功能。以下是使用TableView实现多选的示例代码:
```java
TableView<Person> tableView = new TableView<>();
tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
TableColumn<Person, Boolean> selectColumn = new TableColumn<>("");
selectColumn.setCellValueFactory(new PropertyValueFactory<>("selected"));
selectColumn.setCellFactory(CheckBoxTableCell.forTableColumn(selectColumn));
selectColumn.setEditable(true);
TableColumn<Person, String> nameColumn = new TableColumn<>("Name");
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
TableColumn<Person, Integer> ageColumn = new TableColumn<>("Age");
ageColumn.setCellValueFactory(new PropertyValueFactory<>("age"));
tableView.getColumns().addAll(selectColumn, nameColumn, ageColumn);
tableView.setItems(getData());
Button button = new Button("Get Selected Items");
button.setOnAction(e -> {
ObservableList<Person> selectedItems = tableView.getSelectionModel().getSelectedItems();
System.out.println(selectedItems);
});
VBox vbox = new VBox(tableView, button);
Scene scene = new Scene(vbox);
primaryStage.setScene(scene);
primaryStage.show();
```
其中,selectColumn是一个包含CheckBox的表格列,通过CheckBoxTableCell.forTableColumn(selectColumn)方法设置单元格为CheckBox。
在Person类中,需要添加一个selected属性来表示该项是否被选中。以下是Person类的示例代码:
```java
public class Person {
private SimpleBooleanProperty selected;
private String name;
private int age;
public Person(boolean selected, String name, int age) {
this.selected = new SimpleBooleanProperty(selected);
this.name = name;
this.age = age;
}
public boolean isSelected() {
return selected.get();
}
public void setSelected(boolean selected) {
this.selected.set(selected);
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
```
在getData()方法中,需要返回一个包含Person对象的ObservableList。以下是getData()方法的示例代码:
```java
private ObservableList<Person> getData() {
ObservableList<Person> data = FXCollections.observableArrayList();
data.add(new Person(false, "John", 30));
data.add(new Person(false, "Mary", 25));
data.add(new Person(false, "Bob", 40));
data.add(new Person(false, "Alice", 35));
return data;
}
```
在按钮的事件处理程序中,同样可以使用getSelectedItems()方法获取所有被选择的项。