4

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

1 回答 1

6
tblView.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                tblView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
            }
        });
于 2015-08-15T21:33:42.943 回答