我正在替换表列的 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 及其各自的表列吗?
因此,如果有人对我的问题有解决方案.. 我将不胜感激。:)