2017-04-19 161 views
-2

你好我目前正在建设使用javaFx的项目,并想知道是否有可能在运行时动态改变列表视图对象单元格的颜色。列表视图的每个单元格表示具有与其关联的颜色的对象。我遇到的问题是每个对象都有一个在运行时生成的颜色,对象的数量不一定会保持不变。Javafx listview动态改变列表视图单元格的颜色

javaFX代码库正在使用的底层GUI是fxml。我已经尝试过使用CSS,但由于在运行时会生成与这些对象相关的对象和颜色的数量,所以我无法将其强制编码到样式表中。我也一直在寻找使用细胞工厂为每个细胞创建所需的细胞,但是我需要将颜色传递到细胞工厂,并且必须采用RGB格式。有没有人对这个问题有任何经验?

的for(int i = 0;我< mice.mice.size();我++){

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

试着问一个具体问题,为您提供迄今做了什么。 SO不是一个编写代码的网站。 – Masoud

回答

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; 
     } 
    }); 
+0

这可以修改,以便设置样式方法可以采用不同的rgb值吗? – user3624469

+0

@ user3624469请参阅更新 – Oswald

相关问题