Java 维护TableColumn的基础值,但出于排序目的显示其他内容
FXML的相关摘录: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"
<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));
}
});