您好我正在构建使用javaFx的项目,并且想知道是否可以在运行时动态更改listview对象单元格的颜色。列表视图的每个单元表示具有与之关联的颜色的对象。我遇到的问题是每个对象都有一个在运行时生成的颜色,对象的数量不一定保持不变。
javaFX代码库正在使用的底层GUI是fxml。我已经尝试过使用CSS,但由于在运行时生成了与这些对象关联的对象和颜色的数量,因此无法将其硬编码到样式表中。我一直在寻找使用单元工厂为每个单元格创建所需的单元格,但我需要将颜色传递到单元格工厂,它必须是RGB格式。有没有人对这个问题有任何经验?
for(int i = 0; i< mice.mice.size(); i ++){
selectedMiceListView.setCellFactory(new Callback<ListView<Object>,
ListCell<Object>>() {
// @Override
public ListCell<Object> call(final ListView<Object> param) {
final ListCell<Object> cell = new ListCell<Object>() {
@Override
protected void updateItem(final Object item, final boolean empty) {
super.updateItem(item, empty);
setStyle("-fx-background-color: rgb(" + mice.mice.get(i).red + "," + mice.mice.get(i).green + ", " + mice.mice.get(i).blue + ");");
}
};
return cell;
}
});
}
以下是我到目前为止所尝试的内容,它说内部类必须有效地拥有最终变量。有没有办法修改它,以便它接受我试图设置它的rgb值?
答案 0 :(得分:0)
试试这个,下面的代码用黑色
绘制listview中的每个单元格 this.listView
.setCellFactory(new Callback<ListView<Object>, ListCell<Object>>() {
@Override
public ListCell<Object> call(final ListView<Object> param) {
final ListCell<Object> cell = new ListCell<Object>() {
@Override
protected void updateItem(final Object item, final boolean empty) {
super.updateItem(item, empty);
setBackground(
new Background(new BackgroundFill(Color.rgb(100, 150, 200), CornerRadii.EMPTY, Insets.EMPTY)));
}
};
return cell;
}
});