4

我想创建一个 GUI,其中一些文本字段可以水平调整大小,但也指定了最大宽度。例如,首选宽度是 100 像素,如果调整窗口大小,它可以更大,但允许的最大宽度是 200 像素。GroupLayout支持这一点,我们可以在addComponent方法中指定最大尺寸(以及最小和首选)。

我正在使用 Netbeans 和Swing GUI Builder (Matisse)。我可以将文本字段设置为可调整大小,我可以设置首选大小,但我发现没有地方可以设置最大大小(和最小值)。这是属性表的布局部分:

替代文字 http://img690.imageshack.us/img690/3523/netbeanstfproplayout.png

由于无法设置最大大小,Netbeans 改用Short.MAX_VALUE它,因此如果文本字段可调整大小,则它没有上限。我也尝试设置maximumSize组件的属性,但它没有效果,将被忽略。

如果我手动编辑.form文件,我可以将max="32767"部分更改为max="200"Netbeans 生成正确的代码。有没有办法在不手动编辑.form文件的情况下设置它?

4

2 回答 2

0

我正在查看JTextField组件上关于组件大小的可用选项。这些设置是对LayoutManager的建议(提示)。最终,LayoutManager决定了组件的大小。对于 Matisse 和 .form 对象,布局完全由 .form 参数控制。没有从标准 API 操作 .form 对象的自动化方法。

有一个名为FormGenerator的工具,旨在尝试从现有的 Swing 对象生成 .form 对象。您可以使用它来动态地操作您的 .form 文件。

于 2012-12-14T15:16:27.297 回答
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的帮助下解决了这个问题。

于 2013-10-01T09:08:41.420 回答