我有一个合理大小的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);