我正在编写自定义文件选择组件。在我的UI中,首先用户点击一个按钮,弹出 JFileChooser ;当它关闭时,所选文件的绝对路径将写入 JTextField

问题是,绝对路径通常很长,导致文本字段放大,使其容器太宽。

我试过这个,但它没有做任何事,文本字段仍然太宽:

fileNameTextField.setMaximumSize(new java.awt.Dimension(450, 2147483647));

目前,当它为空时,由于附加了 GridBagConstraints ,它已经是400px长。

我希望它像HTML页面中的文本字段一样,它具有固定的大小,并且在输入太长时不会放大。

那么,如何设置 JTextField 的最大大小?

有帮助吗?

解决方案

它可能取决于您的文本字段所在的布局管理器。某些布局管理器会扩展,而某些布局管理器则不会。有些只在某些情况下扩展,有些则总是扩展。

我假设你正在做

filedNameTextField = new JTextField(80); // 80 == columns

如果是这样,对于大多数合理的布局,字段不应改变大小(至少,它不应该增长)。布局管理器在放入 JScrollPane 时会表现得很糟糕。

根据我的经验,尝试通过 setMaximumSize setPreferredWidth 等来控制大小是最不稳定的。 Swing自己决定使用布局管理器,你几乎无能为力。

所有这一切,我没有遇到你遇到的问题,这让我相信一些明智的布局管理器会解决这个问题。

其他提示

我通过使用 setMaximumSize 设置文本字段容器的最大宽度来解决这个问题。

根据davetron的回答,这是一个脆弱的解决方案,因为布局管理员可能会忽视该属性。就我而言,容器是最顶层的,并且在第一次测试中它起作用。

请勿在文本字段中设置任何尺寸。而是通过setColumns或使用带有column参数的构造函数将列大小设置为非零值。

当列为零时,JTextComponent报告的首选大小是呈现文本所需的全部空间量。当列设置为非零值时,首选大小是显示许多标准列宽的所需大小。 (对于可变间距字体,它通常接近小写字母“m”的大小)。将列设置为零后,文本字段将请求尽可能多的空间并扩展整个容器。

由于你已经在带有填充的GridBagLayout中使用了它,你可以将列设置为1并让填充根据其他组件或其他适当的低数量将其拉伸。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top