gpt4 book ai didi

java - 有没有办法改变javafx中tableview中一行的样式?

转载 作者:行者123 更新时间:2023-12-01 23:03:37 24 4
gpt4 key购买 nike

在我使用 javafx 的应用程序中,我有一个包含几行的表格 View 。我想在一行中更改 CSS 样式以满足我自己的要求。我尝试过:

personTable.setRowFactory(new Callback<TableView<Person>, TableRow<Person>>() {
@Override
public TableRow<Person> call(TableView<Person> personTableView) {
return new TableRow<Person>() {
@Override
protected void updateItem(Person person, boolean b) {
super.updateItem(person, b);
if(.../*my requirements*/) {
getStyleClass().add("priorityLow");
}
}
};
}
});

但是它不起作用。谁能帮我 ? :)

最佳答案

参见Programmatically change the TableView row appearance对此主题进行更全面的讨论。

由于单元格被重复使用,您需要确保只向每个单元格添加一次样式类。 (在您当前的代码中,如果该项目从您的条件为真的一项更改为您的条件为真的另一项,则样式类列表将包含重复的“priorityLow”条目。最终,您可能会耗尽内存通过充分复制这个。)

此外,如果您的条件为假,则需要删除所有出现的“priorityLow”。 (在您当前的代码中,如果该项目从您的条件为 true 的项目更改为您的条件为 false 的项目,则“priorityLow”类将保持错误附加状态。)

类似这样的事情:

personTable.setRowFactory(new Callback<TableView<Person>, TableRow<Person>>() {
@Override
public TableRow<Person> call(TableView<Person> personTableView) {
return new TableRow<Person>() {
@Override
protected void updateItem(Person person, boolean b) {
super.updateItem(person, b);
if(.../*my requirements*/) {
ObservableList<String> styles = getStyleClass();
if (! styles.contains("priorityLow")) {
getStyleClass().add("priorityLow");
}
} else {
// Remove all occurrences of "priorityLow":
styles.removeAll(Collections.singleton("priorityLow"));
}
}
};
}
});

如果您使用的是 JavaFX 8,则使用 PseudoClass 的解决方案es 会更干净、更高效:

更新 PseudoClass 版本(仅限 Java 8):

final PseudoClass lowPriorityPseudoClass = PseudoClass.getPseudoClass("priority-low");
personTable.setRowFactory(new Callback<TableView<Person>, TableRow<Person>>() {
@Override
public TableRow<Person> call(TableView<Person> personTableView) {
return new TableRow<Person>() {
@Override
protected void updateItem(Person person, boolean b) {
super.updateItem(person, b);
boolean lowPriority = /* my requirements */ ;
pseudoClassStateChanged(lowPriorityPseudoClass, lowPriority);
}
};
}
});

CSS 看起来像:

.table-row-cell:priority-low {
/* styles specific for low priority row */
}

关于java - 有没有办法改变javafx中tableview中一行的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23153333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com