Java,Swing:如何设置JTextField的最大宽度?
我正在编写一个自定义文件选择组件。在我的用户界面中,首先用户单击一个按钮,该按钮会弹出一个" JFileChooser"。当它关闭时,所选文件的绝对路径将被写入" JTextField"。
问题是,绝对路径通常很长,这会导致文本字段扩大,从而使其容器过宽。
我已经尝试过了,但是它什么也没做,文本字段仍然太宽:
fileNameTextField.setMaximumSize(new java.awt.Dimension(450, 2147483647));
当前,当它为空时,由于已经添加了" GridBagConstraints",它已经是400px长。
我希望它就像HTML页面中的文本字段,它们具有固定的大小,并且在输入过长时不会放大。
那么,如何设置JTextField
的最大大小?
解决方案
这可能取决于文本字段所在的布局管理器。有些布局管理器会扩展,有些则不会。有些仅在某些情况下会扩展,而其他则始终会扩展。
我假设你在做
filedNameTextField = new JTextField(80); // 80 == columns
如果是这样,则对于大多数合理的布局,该字段不应更改大小(至少不应更改)。当放入JScrollPane
s时,布局管理器的行为通常很差。
以我的经验,尝试通过setMaximumSize和setPreferredWidth等来控制大小充其量是不稳定的。 Swing与布局管理器自行决定,我们几乎无能为力。
综上所述,我没有遇到我们遇到的问题,这使我相信,明智地使用布局管理器可以解决该问题。
我通过使用setMaximumSize设置文本字段容器的最大宽度来解决此问题。
根据davetron的回答,这是一个脆弱的解决方案,因为布局管理器可能会忽略该属性。在我的情况下,容器是最顶部的,在第一次测试中它起作用了。
不要在文本字段上设置任何大小。而是通过setColumns或者将构造函数与column参数一起使用将列大小设置为非零值。
发生的情况是,当列为零时,由JTextComponent报告的首选大小是呈现文本所需的全部空间。当列设置为非零值时,首选大小是所需的大小,以显示许多标准列宽。 (对于可变螺距字体,通常接近小写字母'm'的大小)。在将列设置为零的情况下,文本字段将请求尽可能多的空间,并扩展整个容器。
由于我们已经在带有填充的GridBagLayout中添加了填充,因此我们可以将列设置为1,然后让填充根据其他组件或者其他一些适当的低数字进行扩展。