当前位置: 首页 > 知识库问答 >
问题:

单击javafx中的空行即可清除表视图中的选择

陆绍辉
2023-03-14

我有一个带有一些行的TableView用户可以选择任何行,但是当他单击空行或舞台上的任何地方时,我想清除他当前选择的TableView

共有2个答案

单于浩邈
2023-03-14

您可以存储最后选定的行,并使用现场的鼠标侦听器检查单击是否在选定的行或其他地方:

    ObjectProperty<TableRow<MyRowClass>> lastSelectedRow = new SimpleObjectProperty<>();

    myTableView.setRowFactory(tableView -> {
        TableRow<MyRowClass> row = new TableRow<MyRowClass>();

        row.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> {
            if (isNowSelected) {
                lastSelectedRow.set(row);
            } 
        });
        return row;
    });


    stage.getScene().addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {

        @Override
        public void handle(MouseEvent event) {
            if (lastSelectedRow.get() != null) {
                Bounds boundsOfSelectedRow = lastSelectedRow.get().localToScene(lastSelectedRow.get().getLayoutBounds());
                if (boundsOfSelectedRow.contains(event.getSceneX(), event.getSceneY()) == false) {
                    myTableView.getSelectionModel().clearSelection();
                }
            }
        }
    });
郎灿
2023-03-14

如果单击是在空行上或表视图之外的任何位置,则可以向场景添加事件过滤器,该过滤器使用表视图的选择模型来清除选择:

scene.addEventFilter(MouseEvent.MOUSE_CLICKED, evt -> {
    Node source = evt.getPickResult().getIntersectedNode();

    // move up through the node hierarchy until a TableRow or scene root is found 
    while (source != null && !(source instanceof TableRow)) {
        source = source.getParent();
    }


    // clear selection on click anywhere but on a filled row
    if (source == null || (source instanceof TableRow && ((TableRow) source).isEmpty())) {
        tableView.getSelectionModel().clearSelection();
    }
});
 类似资料:
  • 我有一个如下定义的表视图 当用户单击时,我使用单击的项目详细信息重新加载表。在我重新加载之前,我对表项调用清除 现在,当我单击另一个项目并尝试重新加载表格时,它看起来像下面这样。这是非常奇怪的,因为应该只有一行,但行的大小是一样的,就像从以前的点击,其余的行是空的,除了图标。当我点击图标时,没有任何反应。任何人以前都面临过这种情况。有人知道这是什么原因吗? 我的工具定义如下。它们只是2 的

  • 问题内容: 我试图让表单元格在创建新行时显示字符串。但是所有行都是空的。有人知道我在做什么错吗?这是主要的类:包应用程序; 这是正常的并且可以正常工作,所以我认为您不必为此担心。 这是控制器类。我认为问题可能出在哪里。 这也是tableviewer所需的表类 你们知道什么地方可能出错,或者建议我如何只添加tableviewer,使其代码仍可与SceneBuilder中的其余fxml文件一起使用?

  • 我试图在GridView中显示字符串的动态列表。每个单词都可以点击,可以选择或取消选择。我正在附加Flipboard的屏幕截图,因为我想要完全相同的功能。 请帮我找出在我的应用程序中实现的相同功能。

  • 问题内容: 我现在正在寻找几天以寻求ListView中可点击项的解决方案。 首先,我遇到了这个问题: **developer.android.com/resources/articles/touch-mode.html** ,发现它没有“正常”的onListItemClick()行为。 然后我遇到了 这段代码 :http : //www.androidsnippets.org/snippets/1

  • 我有一个listView,它充满了字符串的数组列表,我想让它可点击...但我无法识别哪个项目被点击了 我做了这个,但没用! 有办法知道被点击的字符串吗?如果没有,是否有办法知道被点击项目的位置?

  • 问题内容: 我有一个程序,提示用户从四个选项(从一组RadioButtons中)中选择一个选项。 用户做出选择后,他/她单击一个按钮,然后收到一条消息。关闭窗口后,用户将返回第一个窗口,并根据需要进行新的选择。我想要的是使单选按钮完全清楚。 到目前为止,我已经实现了一种方法,实际上可以取消选择单选按钮并且可以很好地工作(清除变量的值),而没有做的是从先前选择的单选按钮中删除黑点。另一方面,取消选中