在tableView javafx中多选

时间:2016-09-07 09:02:57

标签: javafx tableview

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

我的代码如下:

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

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

1 个答案:

答案 0 :(得分: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检查事件是否为触摸事件。