Javafx listview动态更改listview单元格的颜色

时间:2017-04-19 03:09:34

标签: css listview javafx fxml

您好我正在构建使用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值?

1 个答案:

答案 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;
      }
    });
相关问题