首页 > 解决方案 > 如何在 JavaFX 的组合框中用文本替换向下箭头

问题描述

我正在尝试从组合框中删除向下箭头。我找到的所有解决方案都只是让箭头消失,例如这个

有没有办法完全删除箭头出现的空间并只用所选选项的文本填充框?

标签: javafxcombobox

解决方案


如果您想完全消除箭头和箭头按钮空间,您可以尝试使用下面的自定义 ComboBox。

下面的代码将箭头按钮和箭头节点大小设置为 0 并要求重新渲染组合框。空检查是让这个更改只应用一次。

public class MyComboBox<T> extends ComboBox<T>{
    Region arrowBtn ;

    @Override
    protected void layoutChildren() {
        super.layoutChildren();
        if(arrowBtn==null){
            arrowBtn= (Region)lookup(".arrow-button");
            arrowBtn.setMaxSize(0,0);
            arrowBtn.setMinSize(0,0);
            arrowBtn.setPadding(new Insets(0));

            Region arrow= (Region)lookup(".arrow");
            arrow.setMaxSize(0,0);
            arrow.setMinSize(0,0);
            arrow.setPadding(new Insets(0));

            // Call again the super method to relayout with the new bounds.
            super.layoutChildren();
        }
    }
}

更新 :

根据@kleopatra 的建议,我们也可以使用 css 获得相同的行为(无需为 ComboBox 创建新类)。

.combo-box .arrow-button,
.combo-box .arrow{
   -fx-max-width:0px;
   -fx-min-width:0px;
   -fx-padding:0px;
}

下图将告诉您普通组合框和此自定义组合框的区别。左边是普通的comboBox,使用ScenicView查看时可以看到列表单元格。正确的是自定义的。列表单元被完全占据,抑制了箭头空间。

在此处输入图像描述


推荐阅读