2016-09-07 59 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