设置JavaFX TableView单元的字体颜色?

设置JavaFX TableView单元的字体颜色?,第1张

设置JavaFX TableView单元的字体颜色?

您需要覆盖CellFactory。

仅第三列的部分代码

    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);         }     } };        }    });

整个代码示例

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;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);    }} public static void main(String[] args) {    Application.launch(args);}@Overridepublic 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();}}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5601067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存