セル選択が有効で、複数選択が有効な適度なサイズの TableView (4000 行、3 列) があります。最初の列の最初のセルをクリックし、Shift キーを押しながら最後の列の最後のセルをクリックしてテーブル全体を選択すると、プログラムがハングし、最終的にクラッシュします。
ただし、Ctrl+A を使用してテーブル全体を選択すると、問題はありません。また、セルの選択を無効にして、セルではなく行が選択されるようにしても、ハングはありません。
セル選択を有効にしたいのですが、ユーザーが Shift+クリック を使用してデータの大きなセクションを選択するのは直感的であるため、ハングは大きな問題です。ハングを防ぐためにコードを改善することはできますか?
基になるデータ モデルは次のとおりです。
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);