gpt4 book ai didi

java - 从相应的列标题节点获取 javafx TableColumn

转载 作者:行者123 更新时间:2023-11-30 11:15:52 24 4
gpt4 key购买 nike

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

这里的问题是,您只能通过父 TableView 中的 lookupAll() 获取 header 节点。由于只有在呈现 TableView 后才能进行查找,我使用 Platform.runLater(..) 调用此方法。

表格 View 类:

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 及其各自的表列吗?

因此,如果有人能解决我的问题……我将不胜感激。 :)

最佳答案

创建列时,使用 Label 作为图形而不是设置文本。然后你可以用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);

关于java - 从相应的列标题节点获取 javafx TableColumn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25144215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com