css - 制作更小的 JavaFX ComboBox

标签 css layout combobox javafx size

我正在尝试制作一个较小版本的组合框,但无论我做什么,文本和箭头按钮之间的间隙都是不变的。

如果我使用 css:

.combo-box-base > *.arrow-button {
    -fx-padding: 0 0 0 0;
    -fx-background-color: pink, pink, pink, pink;
}

箭头按钮变小了,但 ComboBox 本身仍然有相同的大小,只是增加了箭头和文本之间的间隙以进行补偿。

如果我这样做

.combo-box > .list-cell {
    -fx-padding: 0 0 0 0;
    -fx-border-insets: 0 0 0 0;
}

组合的高度变小了,但宽度保持不变。

有没有办法通过减小文本和箭头之间的大小来使组合的首选大小更小?

single entry combo

最佳答案

我知道这个问题很老了,但我遇到了同样的问题并想解决它。因此,我开始逐步调试 JavaFX 代码,以了解额外空间的来源。 我花了比应有的时间更长的时间,因为我忽略了一小段具有巨大影响的代码。

ComboBoxListViewSkin 类默认负责计算ComboBox 宽度。它的 compute 方法将计算委托(delegate)给父类(super class)和字段 listViewprefWidth 方法,并选择较大的结果。

/** {@inheritDoc} */
@Override protected double computePrefWidth(double height, double topInset, double rightInset, double bottomInset, double leftInset) {
    double superPrefWidth = super.computePrefWidth(height, topInset, rightInset, bottomInset, leftInset);
    double listViewWidth = listView.prefWidth(height);
    double pw = Math.max(superPrefWidth, listViewWidth);

    reconfigurePopup();

    return pw;
}

listView 字段实际上是 Anonymous Classes 的一个实例,它扩展 ListView 做一些 ComboBox 特定的事情并重写一些方法。其中一种方法是 protected double computePrefWidth(double height)。它包含导致我们无法摆脱的额外空白问题的行。

pw = Math.max(comboBox.getWidth(), skin.getMaxCellWidth(rowsToMeasure) + 30);

将 30 添加到最宽的单元格宽度正是我们不想要的。因为它是硬编码的,所以我们无法轻易更改它。乍一看我忽略了它,在调试代码时导致了一些 WTF 时刻。 当然,您可以扩展 ComboBoxListViewSkin 并覆盖其 computePrefWidth 方法,但我认为默认的 ComboBoxListViewSkin 类应该提供轻松更改此额外空白的可能性。所以我提交了 issue at GitHub .

关于css - 制作更小的 JavaFX ComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24852429/

相关文章:

javascript - 使用 jQuery 切换显示状态

android - 无法应用新的 Android 布局

wpf - DisplayMemberPath 不适用于直接项目?

html - 如何将多种背景颜色应用于一个div

javascript - jquery显示和隐藏图片

javascript - 动态强制 2 个 div 成为较大 div 大小的 CSS/JavaScript 技术

html - jsfiddle layout broken : wrong input size. 大小存储在哪里?

c++ - Qt - 如何在 QVBoxLayout 中放置具有左右边距的 QTextEdit?

java - 当从 Javafx 中的组合框中选择项目时,如何在 TextField 上显示不同的文本?

c# - 根据 ComboBox 中选定的索引项获取工作表