Shift +单击以选择JavaFX TableView中的多个单元格挂起

ste*_*eer 4 java javafx javafx-2

我有一个合理大小的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;
   }
}
Run Code Online (Sandbox Code Playgroud)

这是表格代码:

  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);
Run Code Online (Sandbox Code Playgroud)

K M*_*lom 6

tblView.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                tblView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
            }
        });
Run Code Online (Sandbox Code Playgroud)