Java 维护TableColumn的基础值,但出于排序目的显示其他内容

Java 维护TableColumn的基础值,但出于排序目的显示其他内容,java,javafx-8,Java,Javafx 8,FXML的相关摘录: <TableView fx:id="events"> <columns> <TableColumn fx:id="eventTime" text="Time"/> <TableColumn fx:id="eventType" text="Event type"/> <TableColumn fx:id="eventRule"

FXML的相关摘录:

    <TableView fx:id="events">
        <columns>
            <TableColumn fx:id="eventTime" text="Time"/>
            <TableColumn fx:id="eventType" text="Event type"/>
            <TableColumn fx:id="eventRule" text="Matcher"/>
            <TableColumn fx:id="eventIndex" text="Index"/>
            <TableColumn fx:id="eventDepth" text="Depth"/>
            <TableColumn fx:id="eventPath" text="Matcher path"/>
        </columns>
    </TableView>
本人对该财产具有如下约束力:

public DefaultTraceTabView(final TraceTabUi ui)
{
    this.ui = ui;
    bindColumn(ui.eventTime, "nanoseconds");
    // other non relevant code
}

//

private static <T> void bindColumn(final TableColumn<TraceEvent, T> column,
    final String propertyName)
{
    column.setCellValueFactory(new PropertyValueFactory<>(propertyName));
}
public DefaultTraceTabView(最终TraceTabUi)
{
this.ui=ui;
bindColumn(ui.eventTime,“纳秒”);
//其他非相关代码
}
//
专用静态void bindColumn(最终表列,
最终字符串(propertyName)
{
column.setCellValueFactory(新的PropertyValueFactory(propertyName));
}
好的,这样行;我可以对列进行排序,但显示是。。。好。。。纳秒

我想在列中显示的不是例如
983420
,而是
98ms,343.420μs
。但是请保留为属性定义的排序顺序

我如何做到这一点?

回答自我

在以下位置找到解决方案:

ui.eventTime.setCellFactory(param->newTableCell())
{
@凌驾
受保护的void updateItem(最终长项,最终布尔值为空)
{
super.updateItem(项,空);
setText(空?空:nanosToText(项));
}
});

nanosToText()
是一种按照名称进行排序的方法。

通过设置表列比较器,您可以按任何方式进行排序。如果您有问题,我会找出一些旧代码。@brian我不需要自定义比较器;
Long
的内置排序工作正常。我想做的是更新单元格中的显示文本,同时保持“基础”值。
public DefaultTraceTabView(final TraceTabUi ui)
{
    this.ui = ui;
    bindColumn(ui.eventTime, "nanoseconds");
    // other non relevant code
}

//

private static <T> void bindColumn(final TableColumn<TraceEvent, T> column,
    final String propertyName)
{
    column.setCellValueFactory(new PropertyValueFactory<>(propertyName));
}
    ui.eventTime.setCellFactory(param -> new TableCell<TraceEvent, Long>()
    {
        @Override
        protected void updateItem(final Long item, final boolean empty)
        {
            super.updateItem(item, empty);

            setText(empty ? null : nanosToText(item));
        }
    });