javafx - 如何在 JavaFX 的组合框中用文本替换向下箭头
解决方案
如果您想完全消除箭头和箭头按钮空间,您可以尝试使用下面的自定义 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查看时可以看到列表单元格。正确的是自定义的。列表单元被完全占据,抑制了箭头空间。
推荐阅读
- java - Spring Webflux Webclient:窃听日志记录问题
- asp.net - 工具栏中的 NavigateUrl
- typescript - Spread only overlapping elements of an object into a new one with TypeScript
- msbuild - 构建步骤后在 Cake 脚本中公开 MSBuild 属性
- c - READELF - 如何在符号名称后添加“@GLIBX_XXX”
- mysql - 无法删除 myphpadmin mysql 表中的字段(在奖励空间免费托管上)
- ios - 如何使用 UICollectionViewCompositionalLayout 将不同宽度的项目放在一起?
- python - TensorFlow 从 TFrecords 生成列 ['label'] 的 CSV 文件
- amazon-web-services - 需要导出 Amazon S3 服务器中每个文件的路径/url
- java - 在 JPA 中使用 @EmbeddedId 替代 @GeneratedValue 的可能方法