网格包布局管理器和调整控件大小

3
我不确定GridBagLayoutManager是否是唯一具有此功能的布局管理器,但这是我的问题。我在GridBagLayout中水平放置了4个控件。为了简化这个例子,每个控件占据表单的1/4,并且每个控件与其他控件相同比例地调整大小。这四个控件是JTextField,其中每个文本字段映射到ResultSet中的一列记录。表单上的其他控件允许用户浏览记录。
如果我从一个记录导航到另一个记录,那么文本字段会更新其文本以显示新数据。然而,文本字段也会自动按比例调整大小,以显示它们所显示的文本量...文本量较大的文本字段会扩展大小,而文本量较小的文本字段则会被挤压。如果我在ResultSet中运行10条记录,那么控件总是在调整大小,看起来相当奇怪。
我想做的是防止这些控件调整大小,除非(并且直到)底层容器调整大小。因此,如果我调整窗口大小,那么我希望控件根据布局中的“weight x”变量进行调整大小,但我不希望控件仅因其所显示的文本量增加或减少而调整大小。
有人有任何想法吗?

我应该补充说明,这种调整大小的行为不仅是JTextField的“问题”,而且也会出现在其他控件中,例如JComboBox等。 - user85116
当将JTextField中的“columns”值设置为10或类似数字时,问题得以解决。感谢Sun论坛上的“camickr”指出这一点。 - user85116
1个回答

2
对于JTextField(如内容中所述),调用setColumns(int)设置文本的首选大小。
对于JComboBox,调用setPrototypeDisplayValue(Object)会导致该值被呈现,并根据该值设置JComboBox的首选大小。
通常情况下,您可以直接在任何组件上调用setPreferredSize(Dimension)以获得相同的行为。如果未设置,则根据组件上的某些默认值计算该值。 JTextFieldJComboBox和大多数JTextComponent衍生类的首选大小是由用户能够更改的值(文本值、组合框选择)驱动的。而对于大多数其他组件(JButtonJCheckBox等),当用户操作它时,内容大小实际上并不会发生变化。设置列、行和原型显示值可修复用于计算首选大小的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接