Java NetBeans中的GroupLayout自动生成代码

Java NetBeans中的GroupLayout自动生成代码,java,swing,netbeans,grouplayout,Java,Swing,Netbeans,Grouplayout,在java编程将近4年后,我决定自己学习如何编写GUI类,因为到目前为止,我一直使用NetBeans GUI编辑器(我并不特别自豪,但它工作得很好,避免了我对组件布局的担忧) 问题是,我正在按照教程学习这个布局管理器,我发现它非常强大。现在我自己做了一个小例子,然后尝试在Netbeans GUI编辑器中做同样的事情,我发现两个代码之间存在一些差异,我想知道我是否遗漏了什么,或者Netbeans只是在GroupLayout定义中添加了无用的代码 这是我的目标: 这是我的: 正如你们所见,我只定义

在java编程将近4年后,我决定自己学习如何编写GUI类,因为到目前为止,我一直使用NetBeans GUI编辑器(我并不特别自豪,但它工作得很好,避免了我对组件布局的担忧)

问题是,我正在按照教程学习这个布局管理器,我发现它非常强大。现在我自己做了一个小例子,然后尝试在Netbeans GUI编辑器中做同样的事情,我发现两个代码之间存在一些差异,我想知道我是否遗漏了什么,或者Netbeans只是在GroupLayout定义中添加了无用的代码

这是我的目标:

这是我的:

正如你们所见,我只定义了平行组为水平组,顺序组为垂直组。但是Netbeans会自动生成以下代码:

    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                .addComponent(label, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
                .addComponent(separator)
                .addComponent(scrollPane))
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(label)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(scrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 224, Short.MAX_VALUE)
            .addContainerGap())
    );

正如你所看到的,团队结构比我的稍微复杂一些。我只是想知道我是否弄错了,或者Netbeans只是不必要地添加了比需要的更多的组。

欢迎Netbeans GUI设计器作为理解Swing的一种手段,而不是替代品。总结评论意见

  • 虽然
    GroupLayout
    是为自动生成代码而设计的,但它可以有效地手动使用,如图和所示。还可以将其集成到建议的混合开发方法中

  • 经验丰富的开发人员明智地建议学习一个或多个流行的第三方布局,例如,或,这些布局从接受人类可读的文本参数中获得一些能力。我看到
    GroupLayout
    在同一个类别中,只是有一个

  • 在您的示例中,这两种布局具有不同的调整大小行为,这可能会影响其他选择。小心这个常见的问题


请注意:GroupLayout设计用于构建器,因此很难与手动编码一起使用。我的建议是使用一个LayoutManager,它被设计为在手动代码中易于使用,fi是三大布局之一:MigLayout、FormLayout、DesignGridBagLayout。sscce为+1;请注意,这两个有不同的调整大小行为。感谢您的评论!我将看看其他布局管理器,因为,是的,手工编码很难使用它@垃圾天哪,你的行为是对的。我以前没有注意到这一点。特别是我不太喜欢调整尺寸,除非是绝对必要的,比如大桌子或者需要很大空间的东西。这正是我的喜好。@kleopatra DesignGridLayout。GridBagLayout一定是无意中潜入的,尽管我必须说,与GroupLayout相比,即使是GridBagLayout也很容易手动使用。@kiheru:我想知道这一点。:-)非常感谢您抽出时间。我这里有很多书要读,非常有用。特别是关于调整大小的提示;)
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                .addComponent(label, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
                .addComponent(separator)
                .addComponent(scrollPane))
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(label)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(scrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 224, Short.MAX_VALUE)
            .addContainerGap())
    );