如何在 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.
我正在尝试从组合框中删除向下箭头。我找到的所有解决方案只是让箭头消失,例如 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.