我想创建一个GUI,其中一些文本字段可以按比例调整大小,但也指定了最大宽度。例如,首选宽度为100像素,如果调整窗口大小,则可以更大,但允许的最大宽度为200像素。 GroupLayout支持此功能,我们可以在addComponent方法中指定最大尺寸(以及最小和首选)。
我正在使用Netbeans和Swing GUI Builder (Matisse)。我可以将文本字段设置为可调整大小,我可以设置首选大小,但我找不到设置最大大小的位置(并且最小)。以下是属性表的布局部分:
alt text http://img690.imageshack.us/img690/3523/netbeanstfproplayout.png
由于无法设置最大大小,Netbeans会改为使用Short.MAX_VALUE
,因此如果文本字段可调整大小,则没有上限。我也尝试设置组件的maximumSize
属性,但它没有效果,将被忽略。
如果我手动编辑.form
文件,我可以将max="32767"
部分更改为max="200"
,Netbeans会生成正确的代码。有没有办法在不手动编辑.form
文件的情况下设置它?
答案 0 :(得分:0)
我正在查看JTextField组件上有关组件大小的选项。这些设置是LayoutManager的建议(提示)。最终,LayoutManager确定组件大小。对于Matisse和.form对象,布局完全由.form参数控制。没有从标准API操作.form对象的自动方法。
有一个名为FormGenerator的工具,旨在尝试从现有的Swing对象生成.form对象。您可以使用它来动态地操作.form文件。
答案 1 :(得分:0)
我通过在自动生成的initComponentsFix()
方法之后添加initComponents()
来解决此问题。然后,您可以编程设置最大大小,如下所示:
private void initComponentsFix()
{
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTabbedPaneTravelForms, javax.swing.GroupLayout.DEFAULT_SIZE, 800, 900) //changed max size
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTabbedPaneTravelForms, javax.swing.GroupLayout.DEFAULT_SIZE, 1228, Short.MAX_VALUE)
);
}
基本上,您覆盖在initComponents()
方法中构建的布局,并将最大大小设置为所需宽度而不是Short.MAX_VALUE
。这对我有用。窗口在最大尺寸时以及在属性中设置的最小尺寸时停止重新调整大小。
尽管这个问题已经过去了,但我希望它仍能帮到某个人。我借助以下答案解决了这个问题Netbeans 6.7.1 mainPanel resizing problem。