【问题标题】:JavaFX Coloring TableCellJavaFX 着色表单元格
【发布时间】:2016-05-05 12:15:59
【问题描述】:

我需要你的帮助!

我有一个包含行的表格(名称等) 现在,当放置在该行上的对象具有特定值时,我想为特定的 tableCells 背景着色。但我只能让它读取这个单元格的值。但我需要阅读对象(在我的代码中称为TableListObject)以了解我需要为单元格着色的颜色。但是该“颜色值”在该行中不可见(没有列)。

这是我的代码:

for(TableColumn tc:tView.getColumns()) {
    if(tc.getId().equals("text")) {
        tc.setCellValueFactory(newPropertyValueFactory<TableListObject,String>("text"));
        // here i need to check the Objects value and coloring that cell
    }
}

这是一个可视化我的问题的 HTML Fiddle: https://jsfiddle.net/02ho4p6e/

【问题讨论】:

标签: java javafx background-color tablecell


【解决方案1】:

为您想要的列调用单元工厂并覆盖updateItem 方法。您需要检查它是否为空,如果不是,您可以进行对象检查,然后您可以设置单元格背景的颜色或您想要的任何其他样式。希望这会有所帮助。

    tc.setCellFactory(column -> {
        return new TableCell<TableListObject, String>() {
            protected void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);

                if (item == null || empty) {
                    setText(null);
                    setStyle("");
                } else {
                    if (item.equals("Something")) {
                        setStyle("-fx-background-color: blue");
                    } else {
                        setStyle("");
                    }
                }
            }
        };
    });

编辑 1:

如果要使用同一行中另一个单元格的值。您将不得不使用该行的索引并获取检查所需的项目。

tc.setCellFactory(column - > {
   return new TableCell < TableListObject, String > () {
     protected void updateItem(String item, boolean empty) {
       super.updateItem(item, empty);

       if (item == null || empty) {
         setText(null);
         setStyle("");
       } else {
         int rowIndex = getTableRow().getIndex();
         String valueInSecondaryCell = getTableView().getItems().get(rowIndex).getMethod();
         if (valueInSecondaryCell.equals("Something Else")) {
           setStyle("-fx-background-color: yellow"); //Set the style in the first cell based on the value of the second cell
         } else {
           setStyle("");
         }

       }
     }
   };
 });

编辑 2:

根据建议改进了答案。这使用了引用的对象。

   else {
         TableListObject listObject = (TableListObject) getTableRow().getItem();
         if (listObject.getMethod().equals("Something Else")) {
           setStyle("-fx-background-color: yellow"); //Set the style in the first cell based on the value of the second cell
         } else {
           setStyle("");
         }
       }

【讨论】:

  • 谢谢。我已经有了这个,但问题是:我需要检查的值不在“项目”字符串中。因为“item”字符串只是当前Cell的Value。但是我需要检查的值在 RowObject 中(并且在任何单元格中)
  • 您要为整行着色吗?
  • 不,只是该行的“文本”单元格
  • 如果项目不是字符串,您可以将其更改为任何类型。喜欢日期等。
  • 当然,但问题是,我需要检查的值在该行中,但不在我要着色的那个单元格中。
猜你喜欢
  • 2017-12-17
  • 2017-02-07
  • 2015-11-12
  • 2011-08-17
  • 1970-01-01
  • 2013-01-09
  • 2011-08-19
  • 2016-05-08
相关资源
最近更新 更多