4

セル選択が有効で、複数選択が有効な適度なサイズの 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);
4

1 に答える 1