我有一个大小合理的 TableView(4000 行,3 列),它既启用了单元格选择,又启用了多选。当我单击第一列中的第一个单元格,然后 Shift + 单击最后一列中的最后一个单元格以选择整个表格时,我的程序挂起并最终崩溃。
但是,当我使用 Ctrl+A 选择整个表格时,没有问题。此外,如果我禁用单元格选择以便选择行而不是单元格,则也不会挂起。
我想保持启用单元格选择,但挂起是一个大问题,因为用户可以直观地使用 Shift+Click 来选择大部分数据。我可以对我的代码进行任何改进以防止挂起吗?
这是底层数据模型:
public class Person {
private final StringProperty id = new SimpleStringProperty();
private final StringProperty firstName = new SimpleStringProperty();
private final StringProperty lastName = new SimpleStringProperty();
public Person(String id, String firstName, String lastName) {
this.id.set(id);
this.firstName.set(firstName);
this.lastName.set(lastName);
}
public StringProperty idProperty() {
return id;
}
public StringProperty firstNameProperty() {
return firstName;
}
public StringProperty lastNameProperty() {
return lastName;
}
}
这是表格代码:
final TableView<Person> table = new TableView<Person>();
table.setItems(viewModel.personList());
TableColumn<Person, String> idColumn = new TableColumn<Person, String>("ID");
idColumn.setCellValueFactory(new PropertyValueFactory<Person, String>("id"));
TableColumn<Person, String> firstNameColumn = new TableColumn<Person, String>(
"First Name");
firstNameColumn.setCellValueFactory(new PropertyValueFactory<Person, String>(
"firstName"));
TableColumn<Person, String> lastNameColumn = new TableColumn<Person, String>(
"Last Name");
lastNameColumn.setCellValueFactory(new PropertyValueFactory<Person, String>(
"lastName"));
table.getColumns().add(idColumn);
table.getColumns().add(firstNameColumn);
table.getColumns().add(lastNameColumn);
table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
table.getSelectionModel().setCellSelectionEnabled(true);
table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);