设置JavaFX TableView Cells的字体颜色?

在我的Java桌面应用程序中,我有一个包含3列的JavaFX表。 我想将第3列的字体颜色设置为红色。 我根本无法设置Tableb的字体颜色。 我查看了CSS,但没有找到任何东西。 有没有办法用CSS做到这一点? 我也寻找setFont(),希望以这种方式设置它。 空空如也。 我甚至无法想办法在某个单元格上设置某些东西。

TableView myTable = new TableView(); ObservableList myTableData = FXCollections.observableArreyList( new TableData("data", "data", "data"), new TableData("data", "data", "data")); TableColumn firstColumn = new TableColumn("First Column"); firstColumn.setProperty("one"); TableColumn secondColumn = new TableColumn("Second Column"); secondColumn .setProperty("two"); TableColumn thirdColumn = new TableColumn("Third Column"); thirdColumn .setProperty("three"); myTable.setItems(myTableData); myTable.getColumns.addAll(firstColumn, secondColumn, thirdColumn); 

我怎么能做到这一点? 如何设置字体颜色? 任何帮助将不胜感激。

您需要覆盖CellFactory。

第三列的部分代码:

  TableColumn thirdColumn = new TableColumn("Third Column"); thirdColumn.setCellValueFactory(new PropertyValueFactory("three")); // ** The TableCell class has the method setTextFill(Paint p) that you // ** need to override the text color // To obtain the TableCell we need to replace the Default CellFactory // with one that returns a new TableCell instance, // and @Override the updateItem(String item, boolean empty) method. // thirdColumn.setCellFactory(new Callback() { public TableCell call(TableColumn param) { return new TableCell() { @Override public void updateItem(String item, boolean empty) { super.updateItem(item, empty); if (!isEmpty()) { this.setTextFill(Color.RED); // Get fancy and change color based on data if(item.contains("@")) this.setTextFill(Color.BLUEVIOLET); setText(item); } } }; } }); 

整个代码示例:

 package tablecelltextcolorexample; import javafx.application.Application; import javafx.beans.property.SimpleStringProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Scene; import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.layout.Priority; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.stage.Stage; import javafx.util.Callback; /** * * @author jKaufmann */ public class TableCellTextColorExample extends Application { public static class TableData { SimpleStringProperty one,two,three; public TableData(String one, String two, String three) { this.one = new SimpleStringProperty(one); this.two = new SimpleStringProperty(two); this.three = new SimpleStringProperty(three); } public String getOne() { return one.get(); } public void setOne(String one) { this.one.set(one); } public String getThree() { return three.get(); } public void setThree(String three) { this.three.set(three); } public String getTwo() { return two.get(); } public void setTwo(String two) { this.two.set(two); } } /** * @param args the command line arguments */ public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { VBox vbox = new VBox(); Scene scene = new Scene(vbox, 200, 200); stage.setTitle("Table View - Change color of a particular column"); stage.setWidth(400); stage.setHeight(500); TableView myTable = new TableView(); ObservableList myTableData = FXCollections.observableArrayList( new TableData("data", "data", "data"), new TableData("data", "data", "data"), new TableData("Name the song","867-5309","SomeEmail@gmail.com")); TableColumn firstColumn = new TableColumn("First Column"); firstColumn.setCellValueFactory(new PropertyValueFactory("one")); TableColumn secondColumn = new TableColumn("Second Column"); secondColumn.setCellValueFactory(new PropertyValueFactory("two")); TableColumn thirdColumn = new TableColumn("Third Column"); thirdColumn.setCellValueFactory(new PropertyValueFactory("three")); // ** The TableCell class has the method setTextFill(Paint p) that you // ** need to override the text color // To obtain the TableCell we need to replace the Default CellFactory // with one that returns a new TableCell instance, // and @Override the updateItem(String item, boolean empty) method. // thirdColumn.setCellFactory(new Callback() { public TableCell call(TableColumn param) { return new TableCell() { @Override public void updateItem(String item, boolean empty) { super.updateItem(item, empty); if (!isEmpty()) { this.setTextFill(Color.RED); // Get fancy and change color based on data if(item.contains("@")) this.setTextFill(Color.BLUEVIOLET); setText(item); } } }; } }); myTable.setItems(myTableData); myTable.getColumns().addAll(firstColumn, secondColumn, thirdColumn); vbox.getChildren().addAll(myTable); VBox.setVgrow(myTable, Priority.ALWAYS); stage.setScene(scene); stage.show(); } } 

守则需要改变:

 // Method for displaying data in table protected void displayDataInTable(){ tblColID.setCellValueFactory(new PropertyValueFactory("id")); // Table cell coloring tblColID.setCellFactory(new Callback, TableCell>() { @Override public TableCell call(TableColumn param) { return new TableCell() { @Override public void updateItem(String item, boolean empty) { super.updateItem(item, empty); if (!isEmpty()) { this.setTextFill(Color.RED); // Get fancy and change color based on data if(item.contains("@")) this.setTextFill(Color.BLUEVIOLET); setText(item); } } }; } }); 

我找到了一个CSS代码。 将此red-column类应用于列。

 .red-column.table-cell { -fx-padding: 0.5em; -fx-border-color: transparent -fx-box-border transparent transparent; -fx-font: 13px "Arial"; -fx-text-fill: red; } 

你的桌子会是这样的。

在此处输入图像描述

表视图的完整css 在这里 。