9

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

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

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

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

目前,当它为空时,它已经是 400px 长,因为它是GridBagConstraints附加的。

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

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

4

3 回答 3

13

这可能取决于您的文本字段所在的布局管理器。有些布局管理器会扩展,有些则不会。有些仅在某些情况下扩展,有些则始终。

我假设你在做

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

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

以我的经验,试图通过setMaximumSize等来控制大小setPreferredWidth充其量是不稳定的。Swing 由布局管理器自行决定,您对此无能为力。

话虽如此,我没有遇到您遇到的问题,这使我相信明智地使用布局管理器将解决问题。

于 2008-09-24T16:00:00.840 回答
3

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

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

于 2008-09-24T16:23:00.377 回答
3

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

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

由于您已经在带有填充的 GridBagLayout 中拥有它,您可能只需将列设置为 1 并让填充根据其他组件或其他适当的低数字将其拉伸。

于 2008-09-24T20:01:20.400 回答