2016-09-07 89 views
1

我想在我的TableView中选择多行。问题是,我的应用程序是一个多点触控应用程序,我没有键盘,所以不是一个CTRL键。Multi select in tableView javafx

我有一个代码如下:

tableViewArticle.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); 

但我想选择很多行只用鼠标点击。例如,当我选择一行时,该行以蓝色变化,如果在选择另一行后,我有两行蓝色。

回答

2

你可以使用一个自定义事件过滤器处理该选择TableView,如果点击发生在一个表行:

tableViewArticle.addEventFilter(MouseEvent.MOUSE_PRESSED, evt -> { 
    Node node = evt.getPickResult().getIntersectedNode(); 

    // go up from the target node until a row is found or it's clear the 
    // target node wasn't a node. 
    while (node != null && node != tableViewArticle && !(node instanceof TableRow)) { 
     node = node.getParent(); 
    } 

    // if is part of a row or the row, 
    // handle event instead of using standard handling 
    if (node instanceof TableRow) { 
     // prevent further handling 
     evt.consume(); 

     TableRow row = (TableRow) node; 
     TableView tv = row.getTableView(); 

     // focus the tableview 
     tv.requestFocus(); 

     if (!row.isEmpty()) { 
      // handle selection for non-empty nodes 
      int index = row.getIndex(); 
      if (row.isSelected()) { 
       tv.getSelectionModel().clearSelection(index); 
      } else { 
       tv.getSelectionModel().select(index); 
      } 
     } 
    } 
}); 

如果你想以不同的方式处理触摸事件鼠标事件,你也可以如果事件是触摸事件,则使用MouseEvent.isSynthesized来检查。

+0

完美,非常感谢 – Benj