如何为TableView的一行着色?

时间:2017-06-18 23:09:11

标签: java javafx colors tableview cell

我试图了解如何使用JavaFX,但很难理解如何为不同颜色的tableView着色。

我有一个带有tableview的场景,根据radiobuttons获取不同的数据。一个选项显示没有颜色的数据,其他颜色行显示数量的大小。

有缺陷的方法:

private void drawTableColor(){

    //tableColumns[0] = new TableColumn("Spieltag");

    //tableColumns[0].setCellValueFactory(new PropertyValueFactory<MyClass, String>("day"));

    /*tableColumns[0].setCellFactory(column -> {
        return new TableCell<MyClass,String>(){
            @Override
            protected void updateItem(String s, boolean empty){
                super.updateItem(s, empty);

                int i = Integer.parseInt(s);
                System.out.println("TEST " +i);
                if (i<=3){
                    setTextFill(Color.BLUE);
                } else if (i==4){
                    setTextFill(Color.AZURE);
                } else if (i <= 6){
                    setTextFill(Color.GREEN);
                } else if (i == 16){
                    setTextFill(Color.ORANGE);
                } else if (i>16){
                    setTextFill(Color.RED);
                }
            }

        };
    });*/

    ObservableList<MyClass> data2 = FXCollections.observableArrayList(data);
    tableView.setItems(null);
    tableView.setItems(data2);
}

out评论部分给了我麻烦。它不会对行进行着色,也不会在此列中显示任何内容。如果第一行被注释,它会跳过updateItem部分。 知道我做错了吗?

1 个答案:

答案 0 :(得分:1)

问题是你使用的是settextfill() 相反,你应该设置背景的风格

private void drawTableColor(){

    //tableColumns[0] = new TableColumn("Spieltag");

    //tableColumns[0].setCellValueFactory(new PropertyValueFactory<MyClass, String>("day"));

    /*tableColumns[0].setCellFactory(column -> {
        return new TableCell<MyClass,String>(){
            @Override
            protected void updateItem(String s, boolean empty){
                super.updateItem(s, empty);

                int i = Integer.parseInt(s);
                System.out.println("TEST " +i);
                if (i<=3){
                    setStyle("-fx-background-color: blue");
                } else if (i==4){
                    setStyle("-fx-background-color: azure");
                } else if (i <= 6){
                    setStyle("-fx-background-color: green");
                } else if (i == 16){
                    setStyle("-fx-background-color: orange");
                } else if (i>16){
                    setStyle("-fx-background-color: red");
                }
            }

        };
    });*/

    ObservableList<MyClass> data2 = FXCollections.observableArrayList(data);
    tableView.setItems(null);
    tableView.setItems(data2);
}