2013-10-14 70 views
4

我有一个合理大小的TableView(4000行,3列),它既启用了单元格选择,又启用了多项选择。当我点击第一列中的第一个单元格时,然后按住Shift键并点击最后一列中的最后一个单元格以选择整个表格,我的程序挂起并最终崩溃。Shift +单击以选中JavaFX TableView中的多个单元格

但是,当我使用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); 
+0

听起来像什么,应该TableView中的代码加以改进。请在此处提交问题:https://javafx-jira.kenai.com/secure/Dashboard.jspa –

+0

问题提交:https://javafx-jira.kenai.com/browse/RT-33619 –

回答

6
tblView.setOnMouseClicked(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       tblView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); 
      } 
     }); 
+1

请添加说明,这出现在低质量的审查队列中。 – maraca

+0

我有同样的问题,这解决了它。我把我的表从fxml链接到控制器,并添加了这一行,它工作 – 32cupo

相关问题