设置表上的行工厂更新项目 - 样式 -fx-font-weight:粗体不起作用



出于某种原因,当我想将行加粗时,它不起作用。如果我尝试在孩子身上设置样式,也是如此。 我认为这在过去是有效的。我使用的是最新的 11.0.2 版本。

请参阅下面的测试代码。不过我可以使用颜色。颜色有效,字体无效。

谢谢!

emailsTableView.setRowFactory(new Callback<TableView<EmailMessage>, TableRow<EmailMessage>>() {
@Override
public TableRow<EmailMessage> call(TableView<EmailMessage> param) {
return new TableRow<>() {
@Override
protected void updateItem(EmailMessage item, boolean empty) {
super.updateItem(item, empty);
if (item != null) {
if (item.isRead()) {
setStyle("");
} else {
//setStyle("-fx-font-weight: bold");
//setStyle("fx-font-style: italic");
//setStyle("-fx-background-color: purple");
for (int i=0; i < getChildren().size(); i++) {
getChildren().get(i).setStyle("-fx-font-weight: bold");
//getChildren().get(i).setStyle("-fx-background-color: purple");
}
}
System.out.println("setupBoldRows " + item + " style: " + getStyle());
}
}
};
}
}

我无法告诉您问题的确切原因(因为我不在 JavaFX 11 环境中工作(。但我希望你尝试一下css styleSheet,看看它是否有效。

在您的 css 文件中:

.table-row-cell:unread{
-fx-font-weight:bold;
}

在代码中:

// Create a unread pseudo state for row.
final PseudoClass unreadPseudoState = PseudoClass.getPseudoClass("unread");
emailsTableView.setRowFactory(new Callback<TableView<EmailMessage>, TableRow<EmailMessage>>() {
@Override
public TableRow<EmailMessage> call(TableView<EmailMessage> param) {
return new TableRow<>() {
@Override
protected void updateItem(EmailMessage item, boolean empty) {
super.updateItem(item, empty);
if (item != null) {
// Update the pseudo state of the row to pick the styling from styleSheet
this.pseudoClassStateChanged(unreadPseudoState, !item.isRead());
}
}
};
}
});

最新更新