You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JFormattedTextField无法完全占据GUI分配空间的问题求助

JFormattedTextField无法占满FormLayout分配的列空间

我正在创建一个显示表格剩余数量的文本框,使用JFormattedTextField时发现它无法完全占据分配给它的列,右侧始终留有多余空间。代码库中有类似实现,使用PercentFormattedTextField就能正常占满整个列空间,不清楚此处异常的原因。已尝试设置/取消边框及调整FormLayout的各类配置,但均无效。

文本框右侧留有多余空间的截图

相关代码:

FormLayout layout = new FormLayout("pref, 10dlu:g, pref, 2dlu, pref",
                                   "pref:g,");

PanelBuilder builder = new PanelBuilder(layout);

builder.add(removeAssignmentButton,      CC.xy(1, 1, "left, center"));

builder.addLabel("Remaining",            CC.xy(3, 1, "right, center"));
builder.add(remainingTextField,          CC.xy(5, 1, "left, center"));

可能的解决方向

  • 修改布局填充约束:将文本框的对齐约束从left改为fill,强制组件横向填充整个列空间:
    builder.add(remainingTextField, CC.xy(5, 1, "fill, center"));
    
  • 调整文本框水平对齐:设置文本框的水平对齐方式为拉伸填充,避免因内容左对齐导致的视觉留白:
    remainingTextField.setHorizontalAlignment(JTextField.STRETCH);
    
  • 对比PercentFormattedTextField实现:检查该自定义文本框是否重写了getPreferredSize()或设置了特殊UI属性(比如强制宽度匹配父容器),若有则将相同逻辑应用到当前JFormattedTextField。
  • 调整列的布局约束:若希望第5列自动拉伸填充可用空间,可将列约束从pref改为pref:g,但需注意平衡整体布局,避免挤压其他组件:
    FormLayout layout = new FormLayout("pref, 10dlu:g, pref, 2dlu, pref:g",
                                       "pref:g,");
    
  • 检查组件内边距:确认文本框是否存在默认内边距,可手动清空:
    remainingTextField.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
    

内容的提问来源于stack exchange,提问作者Ksushant881

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 20:05:06