首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何让JavaFX ListView成为其项目的高度?

如何让JavaFX ListView成为其项目的高度?
EN

Stack Overflow用户
提问于 2013-07-02 23:23:09
回答 8查看 31.6K关注 0票数 29

如果我创建了一个ListView:

代码语言:javascript
复制
new ListView<>(FXCollections.observableArrayList("1", "2", "3"))

我希望它创建一个有3行的ListView。但事实并非如此,它创建了一个大约有17行的ListView。有没有一种方法可以告诉ListView始终是高度,这样无论其中的项目是什么,都会显示出来,但没有空行?

让它自动宽度也会很有用,所以它总是和最宽的一行一样宽。

这样做的一个目的是可以在ScrollPane中使用它。我知道它有自己的滚动条,但它们没有提供足够的控制。

EN

回答 8

Stack Overflow用户

发布于 2014-01-28 22:33:00

我刚刚发现Paul Marshall的答案可以简化为一行代码,使用Bindings.size创建一个表示ObservableList大小的数值型jfx属性:

代码语言:javascript
复制
listView.prefHeightProperty().bind(Bindings.size(itemListProperty).multiply(LIST_CELL_HEIGHT));

遗憾的是,列表单元格的高度必须仍然是硬编码的AFAIK。

票数 10
EN

Stack Overflow用户

发布于 2013-07-04 03:26:46

不幸的是,我们没有一个很好的、干净的ObservableList属性来绑定。相反,通过在列表中添加一个ListChangeListener是可行的,至少我过去是这样做的。默认情况下,每行的大小应该是24px,并且我们需要在顶部和底部为ListView的边缘增加一个像素。否则,我们仍然会显示ListView的滚动条。首先,我们将创建ObservableList和ListView,并设置ListView的初始高度:

代码语言:javascript
复制
/*
 * Each row in a ListView should be 24px tall.  Also, we have to add an extra
 * two px to account for the borders of the ListView.
 */
final int ROW_HEIGHT = 24;
final ObservableList items = FXCollections.observableArrayList("1", "2", "3");
final ListView list = new ListView(items);

// This sets the initial height of the ListView:
list.setPrefHeight(items().size() * ROW_HEIGHT + 2);

现在,我们必须向ObservableList添加一个ListChangeListener。当列表更改时,我们只需更改ListView的设置高度以匹配新的行数。如果我们知道我们永远不会在支持ListView的ObservableList中添加或删除项,那么我们可以排除侦听器。同样,高度是行数乘以每行的高度加上边框的两个额外像素:

代码语言:javascript
复制
/*
 * This listener will resize the ListView when items are added or removed
 * from the ObservableList that is backing the ListView:
 */
items.addListener(new ListChangeListener() {
    @Override
    public void onChanger(ListChangeListener.Change change) {
        list.setPrefHeight(items.size() * ROW_HEIGHT + 2);
    }
});

参考文献:JavaFX ListView DocumentationJavaFX ObservableList Documentation

票数 7
EN

Stack Overflow用户

发布于 2013-12-30 06:50:46

你在搜索这个吗:

代码语言:javascript
复制
.list-cell:empty {
    -fx-opacity: 0;
}

这将隐藏空单元格的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17429508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档