我是TableView
(位于ScrollPane
内),其中一行如下:
tc_proj_amount.setCellValueFactory(cellData ->
new SimpleStringProperty(cellData.getValue().getBalance().toPlainString()));
我想为tc_proj_amount
为负数的整行着色。为此,我用这个:
tc_proj_amount.setCellFactory(column -> new TableCell<Transaction, String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText(null);
} else {
setText(item);
// Style row where balance < 0 with a different color.
BigDecimal balance = new BigDecimal(item);
if (balance.compareTo(BigDecimal.valueOf(0)) < 0) {
TableRow currentRow = getTableRow();
currentRow.setStyle("-fx-background-color: tomato;");
}
}
}
});
当我运行我的应用时,行会根据需要进行整理,但是当我向上滚动列表时,即使tc_proj_amount
不是负数,也会有越来越多的行变为彩色。当我尝试对列进行排序时,所有行都会变为彩色。我该如何解决这个问题?
第二个问题。我想以某种方式格式化tc_proj_amount
的值。为此我做了这个:
DecimalFormat df = new DecimalFormat("#,###.00");
tc_proj_amount.setCellValueFactory(cellData ->
new SimpleStringProperty(df.format(cellData.getValue().getBalance()).toString()));
更改行颜色的部分与上面相同。在这种情况下,我收到一个例外。我该如何解决?
Exception in thread "JavaFX Application Thread" java.lang.NumberFormatException
异常指向行着色的部分。
答案 0 :(得分:0)
我相信您的第一个问题已在此处得到解答:https://stackoverflow.com/a/12425646
总之,滚动时细胞被破坏并重新创建,间接破坏了颜色变化。
答案 1 :(得分:0)
1)覆盖 <div class="article-container">
<div class="article">
<div class="article-child">views 10</div>
</div>
<div class="article">
<div class="article-child">views 9</div>
</div>
<div class="article">
<div class="article-child">views 5</div>
</div>
<div class="article">
<div class="article-child">views 3</div>
</div>
<div class="article">
<div class="article-child">views 1</div>
</div>
</div>
方法时的经验法则是处理所有逻辑分支的情况。对于项目空和非空案例,就像updateItem()
一样,您需要在余额&gt; = 0时设置颜色(即&#34;否则&#34;情况)。将来,您可能会使用css选择器而不是内联样式,因此常见的方法是:
setText()
2)你已经有了一个cellFactory,在那里格式化文本,不需要cellValueFactory。
if(condition)
item.getStyleClass().add("css");
else
item.getStyleClass().remove("css");