我想创建一个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文件的情况下对其进行设置?
发布于 2012-12-14 23:16:27
我正在查看JTextField组件上可用的与组件大小相关的选项。这些设置是对LayoutManager的建议(提示)。最终,LayoutManager决定组件的大小。在使用Matisse和.form对象的情况下,布局完全由.form参数控制。没有从标准应用程序接口操作.form对象的自动化方法。
有一个名为FormGenerator的工具,它被设计用来尝试从现有的Swing对象生成.form对象。您可以使用它动态地操作您的.form文件。
发布于 2013-10-01 17:08:41
我通过在自动生成的initComponents()方法之后添加initComponentsFix()解决了这个问题。然后,可以通过编程方式设置最大大小,如下所示:
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解决了这个问题。
https://stackoverflow.com/questions/1922622
复制相似问题