2
我有一个由Longs表示的时间列表。我想在ListView中显示这些时间,它调用Longs上的String.format(),使它们变成MM:SS.LLL字符串。我有一个表示以毫秒为单位的时间的Longs列表。在显示它们之前,如何创建一个将长格式格式化为MM:SS.LLL的ListView?
我的想法是这样的:,
ObservableList<Long> scores = FXCollections.observableArrayList();
//add a few values to scores...
scores.add(123456);
scores.add(5523426);
scores.add(230230478);
//listen for changes in scores, and set all values of formattedScores based on scores values.
ObservableList<String> formattedScores = FXCollections.observableArrayList();
scores.addListener(o -> {
formattedScores.clear();
for (Long score : scores) {
formattedScores.add(String.format("%1$tM:%1$tS.%1$tL", String.valueOf(score)));
}
});
//create an object property that can be bound to ListView.
ObjectProperty<ObservableList<String>> scoresObjProperty = ObjectProperty<ObservableList<String>>(formattedScores);
ListView<String> listView = new ListView<>();
listView.itemsProperty().bind(scoresObjProperty);
我觉得有一个更好的解决方案,但是可能使用Bindings.format()或类似的东西,而无需监听器重新计算所有的值每一次该列表已更改。