维护TableColumn的基础值,但显示其他内容,以便进行排序

时间:2015-01-16 23:02:35

标签: 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" text="Matcher"/>
            <TableColumn fx:id="eventIndex" text="Index"/>
            <TableColumn fx:id="eventDepth" text="Depth"/>
            <TableColumn fx:id="eventPath" text="Matcher path"/>
        </columns>
    </TableView>

eventTime列定义为:

@FXML
TableColumn<TraceEvent, Long> eventTime;

我这样绑定了属性:

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));
}

好的,这有效;我可以对列进行排序,但显示是......嗯......纳秒。

我希望在列中显示的内容是98343420,而不是98 ms, 343.420 μs。{{1}}。但保持为属性定义的排序顺序......

我如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

回答自己......

this link上找到解决方案:

    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));
        }
    });

nanosToText()是一种符合其名称的方法。