设置JavaFX TableView单元格的字体颜色?
在我的Java桌面应用程序中,我有一个包含3列的JavaFX表。我想将第三列的字体颜色设置为红色。我根本无法设置表格B的字体颜色。我查看了CSS,没有发现任何东西。有没有一种方法可以用CSS来实现呢?我还查找了setFont(),希望能将其设置为那样。那里什么也没有。我甚至想不出在某个牢房里放东西的方法设置JavaFX TableView单元格的字体颜色?,java,tableview,javafx,textcolor,Java,Tableview,Javafx,Textcolor,在我的Java桌面应用程序中,我有一个包含3列的JavaFX表。我想将第三列的字体颜色设置为红色。我根本无法设置表格B的字体颜色。我查看了CSS,没有发现任何东西。有没有一种方法可以用CSS来实现呢?我还查找了setFont(),希望能将其设置为那样。那里什么也没有。我甚至想不出在某个牢房里放东西的方法 TableView<TableData> myTable = new TableView<TableData>(); ObservableList<TableDat
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);
TableView myTable=newtableview();
ObservableList myTableData=FXCollections.ObservableArleyList(
新表格数据(“数据”、“数据”、“数据”),
新表格数据(“数据”、“数据”、“数据”));
TableColumn firstColumn=新的TableColumn(“第一列”);
firstColumn.setProperty(“一”);
TableColumn secondColumn=新的TableColumn(“第二列”);
第二列。设置属性(“二”);
TableColumn thirdColumn=新的TableColumn(“第三列”);
第三列设置属性(“三”);
设置项(myTableData);
myTable.getColumns.addAll(第一列、第二列、第三列);
我怎样才能做到这一点?如何设置字体颜色?任何帮助都将不胜感激。您需要覆盖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);
}
}
};
}
});
TableColumn thirdColumn=新的TableColumn(“第三列”);
第三列。setCellValueFactory(新属性ValueFactory(“三”);
//**TableCell类具有您需要的方法setTextFill(Paint p)
//**需要覆盖文本颜色
//要获取TableCell,我们需要替换默认的CellFactory
//返回一个新的TableCell实例,
//和@Override updateItem(字符串项,布尔空)方法。
//
thirdColumn.setCellFactory(新回调(){
公共TableCell调用(TableColumn参数){
返回新的TableCell(){
@凌驾
public void updateItem(字符串项,布尔值为空){
super.updateItem(项,空);
如果(!isEmpty()){
这个.setTextFill(颜色为.RED);
//根据数据选择并更改颜色
如果(项包含(“@”))
这个.setTextFill(颜色:蓝紫色);
setText(项目);
}
}
};
}
});
整个代码示例:
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();
}
}
package tablecelltextcolorexample;
导入javafx.application.application;
导入javafx.beans.property.SimpleStringProperty;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入javafx.scene.scene;
导入javafx.scene.control.TableCell;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TableView;
导入javafx.scene.control.cell.PropertyValueFactory;
导入javafx.scene.layout.Priority;
导入javafx.scene.layout.VBox;
导入javafx.scene.paint.Color;
导入javafx.stage.stage;
导入javafx.util.Callback;
/**
*
*@作者jKaufmann
*/
公共类TableCellTextColorExample扩展了应用程序{
公共静态类TableData{
简单属性一、二、三;
公共表数据(字符串一、字符串二、字符串三){
this.one=新的SimpleStringProperty(一);
this.two=新的SimpleStringProperty(two);
this.three=新的SimpleStringProperty(three);
}
公共字符串getOne(){
返回一个。get();
}
公共void setOne(字符串一){
这个.一套(一套),;
}
公共字符串getThree(){
返回3.get();
}
公共无效集合三(字符串三){
这个三套三套,;
}
公共字符串getTwo(){
返回2.get();
}
公共无效集合2(字符串2){
这两套,;
}
}
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
应用程序启动(args);
}
@凌驾
公众假期开始(阶段){
VBox VBox=新的VBox();
场景=新场景(vbox,200200);
stage.setTitle(“表视图-更改特定列的颜色”);
舞台布景宽度(400);
舞台设置高度(500);
TableView myTable=新建TableView();
ObservableList myTableData=FXCollections.observableArrayList(
新表格数据(“数据”、“数据”、“数据”),
新表格数据(“数据”、“数据”、“数据”),
新的TableData(“命名歌曲”、“867-5309”和“SomeEmail@gmail.com"));
TableColumn firstColumn=新的TableColumn(“第一列”);
第一列。setCellValueFactory(新属性ValueFactory(“一”);
TableColumn secondColumn=新的TableColumn(“第二列”);
第二列。setCellValueFactory(新属性ValueFactory(“两”);
TableColumn thirdColumn=新的TableColumn(“第三列”);
第三列。setCellValueFactory(新属性ValueFactory(“三”);
//**TableCell类具有您需要的方法setTextFill(Paint p)
//**需要覆盖文本颜色
//要获取TableCell,我们需要替换默认的CellFactory
//返回一个新的TableCell实例,
//和@Override updateItem(字符串项,布尔空)方法。
//
thirdColumn.setCellFactory(新回调(){
公共TableCell调用(TableColumn参数){
返回新的TableCell(){
@凌驾
public void updateItem(字符串项,布尔值为空){
super.updateItem(项,空);
如果(!isEmpty()){
这个.setTextFill(颜色为.RED);
//根据数据选择并更改颜色
如果(项包含(“@”))
这个.setTextFill(颜色:蓝紫色);
setText(项目);
}
}
};
}
});
设置项(myTableData);
myTable.getColumns().addAll(第一列、第二列、第三列);
vbox.getChildren().addAll(myTable);
VBox.s
// 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);
}
}
};
}
});
.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;
}
tableColumn.setStyle("-fx-text-fill: red");