Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从相应的列标题节点获取javafx TableColumn_Java_Javafx_Tableview_Tablecolumn - Fatal编程技术网

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

从相应的列标题节点获取javafx TableColumn,java,javafx,tableview,tablecolumn,Java,Javafx,Tableview,Tablecolumn,我正在替换表列的javafx上下文菜单。关联菜单将允许用户访问类似excel的表格视图过滤。 一切正常,但我现在不想打开列标题上任何鼠标单击事件的上下文菜单。不仅仅是标准的右键单击 这里的问题是,您只能通过父表视图中的lookupAll()获取头节点。 由于只有在呈现了表视图之后才能进行查找,因此我使用Platform.runLater(..)调用此方法 TableView类: private void setHeaderNodesEventHandler() { int i = 0;

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

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

TableView类:

private void setHeaderNodesEventHandler() {
    int i = 0;
    for (final Node headerNode : lookupAll(".column-header")) {
        ((AbstractFilterableTableColumn<E, ?>) getColumns().get(i)).setHeaderNodeEventHandler(headerNode);
        i++;
    }
}
private void setHeaderNodeEventHandler(){
int i=0;
对于(最终节点头节点:lookupAll(“.column header”)){
((AbstractFilterableTableColumn)getColumns().get(i)).setHeaderNodeEventHandler(headerNode);
i++;
}
}
TableColumn类:

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());
        }
    });
}
public void setHeaderNodeEventHandler(最终节点headerNode){
headerNode.addEventHandler(单击MouseEvent.MOUSE_,新建EventHandler()){
@凌驾
公共无效句柄(最终鼠标事件e){
show(headerNode,e.getScreenX(),e.getScreenY());
}
});
}
这里的问题是,我必须相信,找到的headerNode的顺序与列的顺序相同。我真的不希望这里发生什么坏事

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

    private void setHeaderNodesEventHandler() {
        for (final Node headerNode : lookupAll(".column-header")) {
            final AbstractFilterableTableColumn<E, ?> column = (AbstractFilterableTableColumn<E, ?>) headerNode.getParent();
            column.setHeaderNodeEventHandler(headerNode);
        }
    }
private void setHeaderNodeEventHandler(){
对于(最终节点头节点:lookupAll(“.column header”)){
final AbstractFilterableColumn=(AbstractFilterableColumn)headerNode.getParent();
column.setHeaderNodeEventHandler(headerNode);
}
}
您有没有办法在不信任排序的情况下获取headerNode及其各自的表列


所以如果有人能解决我的问题。。我将非常感激。:)

创建列时,使用
标签
作为图形,而不是设置文本。然后,您可以使用
标签注册所需的鼠标侦听器。我还没有对此进行测试,但以下几点应该可以:

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);
TableColumn=newtableColumn();
标签columnHeader=新标签(“列名”);
column.setGraphic(columnHeader);
//注意:您可以将TableColumn传递给setHeaderNodeEventHandler(…)
//方法,因此如果需要,可以访问表示的实际列
setHeaderNodeEventHandler(columnHeader);
setContentDisplay()对于
TableColumn
是未定义的,那么应该如何执行?更新(并简化)。我不确定我在发布时的想法-我想我是在试图保护代码不受
column.setText(…)
调用的影响。但是是的,
TableColumn
没有
contentDisplay
(尽管它看起来应该是一个标签为
)。