JavaFX TableView Cells font color setting?

In my Java Desktop application, I have a JavaFX table with three columns. I want the font color of the 3rd column to be red. I was generally unable to set the font color of the Tableb. I looked in CSS and found nothing. Is there a way to do this using CSS? I also looked for setFont () with the hope of setting it that way. It's empty here. I could not even figure out how to set something in a specific cell.

TableView<TableData> myTable = new TableView<TableData>(); ObservableList<TableData> 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); 

How can i do this? How to set the font color? Any help would be appreciated.

+6
source share
2 answers

You need to override CellFactory.

Partial code of only the third column:

  TableColumn thirdColumn = new TableColumn("Third Column"); thirdColumn.setCellValueFactory(new PropertyValueFactory<TableData,String>("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<TableColumn, TableCell>() { public TableCell call(TableColumn param) { return new TableCell<TableData, String>() { @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); } } }; } }); 

Example of all code:

 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<TableData> myTable = new TableView<TableData>(); ObservableList<TableData> 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<TableData,String>("one")); TableColumn secondColumn = new TableColumn("Second Column"); secondColumn.setCellValueFactory(new PropertyValueFactory<TableData,String>("two")); TableColumn thirdColumn = new TableColumn("Third Column"); thirdColumn.setCellValueFactory(new PropertyValueFactory<TableData,String>("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<TableColumn, TableCell>() { public TableCell call(TableColumn param) { return new TableCell<TableData, String>() { @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(); } } 
+20
source

The code should be slightly modified:

 // Method for displaying data in table protected void displayDataInTable(){ tblColID.setCellValueFactory(new PropertyValueFactory<Person, String>("id")); // Table cell coloring tblColID.setCellFactory(new Callback<TableColumn<Person, String>, TableCell<Person, String>>() { @Override public TableCell<Person, String> call(TableColumn<Person, String> param) { return new TableCell<Person, String>() { @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); } } }; } }); 
+2
source

Source: https://habr.com/ru/post/894646/


All Articles