如何在 JavaFX 的组合框中用文本替换向下箭头

How to replace down arrow with text in a combobox in JavaFX

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

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

如果你想完全消除箭头和箭头按钮space,你可以尝试使用下面的自定义组合框。

下面的代码将箭头按钮和箭头节点的大小设置为 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 创建新的 class)。

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

下图将告诉您普通组合框和自定义组合框的区别。左边是普通的组合框,用 ScenicView 检查时可以看到列表单元格。正确的是自定义的。列表单元格已完全占用,无法显示箭头 space.