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