我假设可以根据以下 JavaFX 11 文档项有条件地格式化JavaFXComboBoxTableCell 标签:
默认情况下,在未编辑时
ComboBoxTableCell呈现为Label[...]。
- 标签类
setTextFill方法说明:
设置属性的值
textFill。
如果我的假设是正确的,我想知道如何修改以下 SSCCE 以便将任何ComboBoxTableCell标签textFill属性设置为以下Paint值。谢谢!
Color.Red如果它的值无效
Color.Blue如果它的值是为不同的行设置的。
public class PersonInRoom extends Application
{
private final ObservableList<Person> data = FXCollections.observableArrayList(
new Person("Jacob" , "Kitchen"),
new Person("Isabella", "Bedroom"),
new Person("Ethan" , "Attic"));
TableView<Person> table ;
public static void main(String[] args) {launch(args);}
@Override
public void start(Stage stage)
{
TableColumn nameCol = new TableColumn("Name");
nameCol.setCellValueFactory(new PropertyValueFactory<Person, String>("name"));
TableColumn roomCol = new TableColumn("Room");
roomCol.setCellValueFactory(new PropertyValueFactory<Person, String>("room"));
roomCol.setCellFactory(ComboBoxTableCell.forTableColumn("Bathroom", "Bedroom", "Kitchen"));
roomCol.setOnEditCommit((EventHandler<CellEditEvent<Person, String>>) t -> t.getTableView().getItems().get(t.getTablePosition().getRow()).setRoom(t.getNewValue()));
table = new TableView<>();
table.setEditable(true);
table.setItems(data);
table.getColumns().addAll(nameCol, roomCol);
VBox vbox = new VBox();
vbox.getChildren().addAll(table);
Scene scene = new Scene(vbox);
stage.setScene(scene);
stage.show();
}
public static class Person
{
private final SimpleStringProperty name;
private final SimpleStringProperty room;
private Person(String name, String room)
{
this.name = new SimpleStringProperty(name);
this.room = new SimpleStringProperty(room);
}
public String getName() {return name.get();}
public String getRoom() {return room.get();}
public void setRoom(String r) {room.set(r);}
}
}

