![](/img/trans.png)
[英]how to set a range of number (between 1-150) for a JTextfield in Java Swing
[英]Java, Swing: how do I set the maximum width of a JTextField?
我正在编写自定义文件选择组件。 在我的UI中,首先用户点击一个弹出JFileChooser
的按钮; 当它关闭时,所选文件的绝对路径将写入JTextField
。
问题是,绝对路径通常很长,导致文本字段放大,使其容器太宽。
我试过这个,但它没有做任何事情,文本字段仍然太宽:
fileNameTextField.setMaximumSize(new java.awt.Dimension(450, 2147483647));
目前,当它为空时,它已经是400px长,因为附加了GridBagConstraints
。
我希望它像HTML页面中的文本字段一样,它具有固定的大小,并且在输入太长时不会放大。
那么,如何设置JTextField
的最大大小?
它可能取决于您的文本字段所在的布局管理器。某些布局管理器会扩展,而有些则不会。 有些只在某些情况下扩展,有些则总是扩展。
我假设你在做
filedNameTextField = new JTextField(80); // 80 == columns
如果是这样,对于大多数合理的布局,字段不应该改变大小(至少,它不应该增长)。 布局管理器在放入JScrollPane
时经常表现不佳。
根据我的经验,尝试通过setMaximumSize
和setPreferredWidth
控制大小等等充其量是不稳定的。 Swing自己决定使用布局管理器,你几乎无能为力。
所有这一切,我没有遇到你遇到的问题,这让我相信一些明智的布局管理器的使用将解决问题。
我通过使用setMaximumSize
设置文本字段容器的最大宽度来解决这个问题。
根据davetron的回答,这是一个脆弱的解决方案,因为布局管理员可能会忽视该属性。 就我而言,容器是最顶层的,并且在第一次测试中它起作用。
不要在文本字段中设置任何大小。 而是通过setColumns或使用带有column参数的构造函数将列大小设置为非零值。
发生的事情是,当列为零时,JTextComponent报告的首选大小是呈现文本所需的全部空间量。 当列设置为非零值时,首选大小是显示许多标准列宽的所需大小。 (对于可变间距字体,它通常接近小写字母“m”的大小)。 将列设置为零时,文本字段请求尽可能多的空间并扩展整个容器。
由于你已经在GridBagLayout中使用了填充,你可能只需将列设置为1并让填充根据其他组件或其他适当的低数量将其拉伸。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.