Java,Swing:如何设置JTextField的最大宽度?

时间:2008-09-24 15:55:17

标签: java swing jtextfield

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

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:13)

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

我假设你正在做

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

如果是这样,对于大多数合理的布局,字段不应改变大小(至少,它不应该增长)。布局经理在放入JScrollPane时往往表现不佳。

根据我的经验,尝试通过setMaximumSizesetPreferredWidth等来控制尺寸充其量是不稳定的。 Swing自己决定使用布局管理器,你几乎无能为力。

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

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

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

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