如何更改TableView行中的文本颜色?

时间:2018-10-25 14:28:02

标签: javafx

我正在尝试更新tableview中的行背景颜色和文本。但是我只能更新背景色。但是我无法使用-fx-text-fill更新文本颜色。有人可以帮忙。

@FXML
private void initialize(){
 tablename.setRowFactory(tv -> new TableRow<ClassName>()
    {
        @Override
        public void updateItem(ClassName item, boolean empty)
        {
            super.updateItem(item, empty);
            if (item == null)
            {
                setText(null);
                setStyle("");
            }
            else
            {
               if (item.gettest().equals("a") {
                 setStyle("-fx-background-color: #38ee00; -fx-text-fill: green;");
                }
               if (item.gettest().equals("b") {
                 setStyle("-fx-background-color: #efe939; -fx-text-fill: red;");
                }
              }
          }
      });

} 

2 个答案:

答案 0 :(得分:0)

TableViewmodena.css的行背景着色,这就是为什么您可以使用内联样式覆盖此属性的原因。虽然-fx-text-fill属性是为TableCell设置的,所以不会使用从TableRow继承的值。

我建议您自己使用CSS样式表,并将伪类应用于行

final PseudoClass green = PseudoClass.getPseudoClass("green");
tablename.setRowFactory(tv -> new TableRow<ClassName>() {
    @Override
    public void updateItem(ClassName item, boolean empty) {
        super.updateItem(item, empty);
        boolean gr = (item != null) && item.gettest().equals("a");
        pseudoClassStateChanged(green, gr); 
    }
});

CSS样式表(需要应用于TableView,祖先或场景)

.table-row-cell:filled {
    -fx-background-color: #efe939;
}

.table-row-cell:filled:green {
    -fx-background-color: #38ee00;
}

.table-row-cell:filled .table-cell {
    -fx-text-fill: red;
}

.table-row-cell:filled:green .table-cell {
    -fx-text-fill: green;
}

答案 1 :(得分:0)

首先需要获取当前ROW:

 TableRow<CallLogs> currentRow = getTableRow();

之后,您可以像现在一样设置颜色,但是要在currentRow中设置

          if (item.gettest().equals("a") {
             currentRow.setStyle("-fx-background-color: #38ee00; -fx-text-fill: green;");
            }
           if (item.gettest().equals("b") {
              currentRow.setStyle("-fx-background-color: #efe939; -fx-text-fill: red;");
            }