2016-09-07 9 views
1

私はTableViewの中で複数の行を選択したいと思います。問題は、私のアプリケーションがマルチタッチアプリケーションであることです。私はキーボードを持っていないので、CTRLというキーはありません。複数選択tableView javafx

私は、コードのフォローがあります

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

をしかし、私は唯一のマウスクリックで行の多くを選択します。たとえば、ある行を選択すると、行が青色に変わり、他の行を選択した後に青色で2行表示されます。

答えて

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