我有一个listview,当我没有项目时,我想显示行。我是否真的必须添加null一次,当添加一个项目时删除该null或是否还有其他可能性?
答案 0 :(得分:0)
这就是我所拥有的(我可以添加占位符,但我不会这样做) empty list now
这就是我想要的 empty list with rows shown
答案 1 :(得分:0)
我通过一个空的ListView并用占位符作为主占位符的其他样式解决了这个问题。
这样,您可以避免弄乱ListView的项目。
创建与此类似的类(该类在Kotlin中):
class ListViewPlaceholder: ListView<Any?>() {
init {
style = "-fx-background-insets: 0; -fx-padding: 0;"
items.add(null)
cellFactory = Callback<ListView<Any?>?, ListCell<Any?>?> {
object : ListCell<Any?>() {
override fun updateItem(item: Any?, empty: Boolean) {
super.updateItem(item, true)
}
}
}
}
}
将背景插图和 padding 设置为0-它将删除占位符ListView的边框,以便准确呈现主ListView的位置(已经有自己的边框)。 / p>
将null
添加到列表中。
设置新的单元格工厂,并使用覆盖的ListCell
方法返回一个updateItem
,在此方法中,您以true
作为第二个参数来调用超级方法。 这是必需的,列表中的第一个项目看起来像一个空单元格,而不是一个包含空项目的单元格。
然后您可以像下面这样在fxml中使用它:
<ListView fx:id="mainListView">
<placeholder>
<ListViewPlaceholder/>
</placeholder>
</ListView>
或在代码中
mainListView.placeholder = ListViewPlaceholder()
具有这种样式
.list-cell {
-fx-border-color: red;
-fx-border-insets: 2;
}
.list-cell:empty {
-fx-border-color: orange;
}
结果看起来像这样
主ListView为空-显示占位符:
主ListView有一项: