3

我正在替换表列的 javafx 上下文菜单。上下文菜单将允许用户访问 Excel,例如过滤表格视图。一切正常,但我现在不想在列标题上的任何鼠标单击事件上打开上下文菜单。不仅仅是标准的右键单击。

此处的问题是,您只能通过父表视图中的lookupAll() 获取标题节点。由于只有在表格视图呈现后才能进行查找,所以我使用 Platform.runLater(..) 调用此方法。

表视图类:

private void setHeaderNodesEventHandler() {
    int i = 0;
    for (final Node headerNode : lookupAll(".column-header")) {
        ((AbstractFilterableTableColumn<E, ?>) getColumns().get(i)).setHeaderNodeEventHandler(headerNode);
        i++;
    }
}

表列类:

public void setHeaderNodeEventHandler(final Node headerNode) {
    headerNode.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>(){

        @Override
        public void handle(final MouseEvent e) {
            contextMenu.show(headerNode, e.getScreenX(), e.getScreenY());
        }
    });
}

这里的问题是,我必须相信,找到的 headerNodes 的顺序与列相同。我真的不需要在这里发生不好的事情。

我宁愿有这样的东西(见下文),这是不可能的,因为我无法从 Parent 转换到我的 AbstractFilterableTableColumn。

    private void setHeaderNodesEventHandler() {
        for (final Node headerNode : lookupAll(".column-header")) {
            final AbstractFilterableTableColumn<E, ?> column = (AbstractFilterableTableColumn<E, ?>) headerNode.getParent();
            column.setHeaderNodeEventHandler(headerNode);
        }
    }

您有什么想法可以在不信任排序的情况下获取 headerNodes 及其各自的表列吗?

因此,如果有人对我的问题有解决方案.. 我将不胜感激。:)

4

1 回答 1

1

创建列时,请使用 aLabel作为图形而不是设置文本。然后,您可以使用Label. 我还没有对此进行测试,但以下几行应该可以工作:

TableColumn<S, T> column = new TableColumn<S, T>();
Label columnHeader = new Label("Column Name");
column.setGraphic(columnHeader);

// note you can pass your TableColumn to the setHeaderNodeEventHandler(...)
// method too, so you can access the actual column represented if you need
setHeaderNodeEventHandler(columnHeader);
于 2014-08-05T19:39:26.860 回答