gpt4 book ai didi

java - 滚动 ListView 会破坏 ListCell 样式

转载 作者:太空宇宙 更新时间:2023-11-04 02:56:45 26 4
gpt4 key购买 nike

我的程序正在根据其内容更改 ListCell 样式:

    debugListView.setCellFactory(listCell -> new ListCell<String>() {
@Override
public void updateItem(String content, boolean isEmpty) {
super.updateItem(content, isEmpty);
if (isEmpty || content == null) {
setText("");
setStyle("");
} else {
setText(content);
if (content.contains("INFO")) {
getStyleClass().addAll("info", "debug");
} else if (content.contains("WARN")) {
getStyleClass().addAll("warning", "debug");
} else if (content.contains("ERROR")) {
getStyleClass().addAll("error", "debug");
}
}
}
});

这很好用,但是如果您滚动列表,样式就会变得困惑。我了解了如何在滚动时管理 ListView 中的 ListCells 并且它们每次都被销毁并重新创建,这可能是问题所在(https://stackoverflow.com/a/12425646/4469105)。类似于 TableView 排序问题,在对列进行排序时,TableCell 样式变得困惑,似乎已用 8u60 ( https://stackoverflow.com/a/11066040/4469105 ) 修复。

尽管如此,我找不到解决此问题的方法。那么有人有想法或一些关键词吗?

提前致谢!

最佳答案

问题的出现是因为样式类是作为 List 实现的,它允许重复的条目。因此,随着用户滚动,导致调用 updateItem(...),您将越来越多的条目添加到单元格的样式类列表中,而从未删除它们。

在你实现你的逻辑之前删除你正在使用的所有特定样式类:

List<String> allStyles = Arrays.asList("info", "debug", "warning", "error");

debugListView.setCellFactory(listCell -> new ListCell<String>() {
@Override
public void updateItem(String content, boolean isEmpty) {
super.updateItem(content, isEmpty);

getStyleClass().removeAll(allStyles);

if (isEmpty || content == null) {
setText("");
setStyle("");
} else {
setText(content);
if (content.contains("INFO")) {
getStyleClass().addAll("info", "debug");
} else if (content.contains("WARN")) {
getStyleClass().addAll("warning", "debug");
} else if (content.contains("ERROR")) {
getStyleClass().addAll("error", "debug");
}
}
}
});

关于java - 滚动 ListView 会破坏 ListCell 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32024953/

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