JavaFX Table Cell背景颜色

时间:2016-09-30 02:56:24

标签: javafx background tableview cell tablecell

TableColumn tc = new TableColumn();

tc.getStyleClass.add(".style in css file")

我用css文件设置tablecolumn。我想让每个细胞都有不同的背景。有没有办法做到这一点?

示例)TableColumn 1~5
         TableColumn 1,第3行有黑色和          TableColumn 5,第4行有绿色......等等。

2 个答案:

答案 0 :(得分:4)

创建一个Build Settings,根据列&列选择背景颜色。行索引。

示例:

cellFactory

此处描述了有效的CSS颜色字符串:https://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html#typecolor

<强>的style.css

TableView<Item<String>> tableView = new TableView<>();
// sample item class contains a single property with the same type as the type parameter (String in this case)
tableView.getItems().addAll(
        new Item<>("1"),
        new Item<>("2"),
        new Item<>("4"),
        new Item<>("5"),
        new Item<>("6"),
        new Item<>("7"),
        new Item<>("8"),
        new Item<>("9")
);

// create columns
TableColumn<Item<String>, String> column1 = new TableColumn<>("value");
TableColumn<Item<String>, Void> column2 = new TableColumn<>();
tableView.getColumns().addAll(column1, column2);

// create list of colors (CSS)
final List<String> colors = Arrays.asList(
        "blue",
        "green",
        "red",
        "violet",
        "yellow",
        ...
);

Callback factory = new Callback<TableColumn<Item<String>, Object>, TableCell<Item<String>, Object>>() {

    private int columns = tableView.getColumns().size();

    @Override
    public TableCell<Item<String>, Object> call(TableColumn<Item<String>, Object> param) {
        return new TableCell<Item<String>, Object>() {

            private int columnIndex = param.getTableView().getColumns().indexOf(param);

            @Override
            public void updateIndex(int i) {
                super.updateIndex(i);
                // select color based on index of row/column
                if (i >= 0) {
                    // select color repeating the color, if we run out of colors
                    String color = colors.get((i * columns + columnIndex) % colors.size());
                    this.setStyle("-fx-my-cell-background: " + color + ";");
                    System.out.println(getStyle());
                }
            }

            @Override
            protected void updateItem(Object item, boolean empty) {
                super.updateItem(item, empty);

                // assign item's toString value as text
                if (empty || item == null) {
                    setText(null);
                } else {
                    setText(item.toString());
                }
            }

        };
    }

};

column1.setCellValueFactory(new PropertyValueFactory<>("value"));
column1.setCellFactory(factory);
column2.setCellFactory(factory);

Scene scene = new Scene(tableView);
scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm());

答案 1 :(得分:1)

要更改TableView所需的特定单元格的行为,您可以设置cellFactory的{​​{1}}。这是一个例子:

TableColumns

在我的例子中,我只是根据单元格的索引设置颜色,但是你可以将它改为更明显更有意义的东西。例如。颜色可以基于单元格的值。