Groovy 使用SwingBuilder的SpringLayout

Groovy 使用SwingBuilder的SpringLayout,groovy,swingbuilder,springlayout,Groovy,Swingbuilder,Springlayout,我正在尝试快速轻松地布局按钮和标签的行和列。按钮和标签的宽度相同看起来很可笑,所以我排除了GridLayout。如果有人建议GridBagLayout,我可能会割腕。所以我想SpringLayout是我最好的选择。但我不是Groovy专家,尤其是GUI方面 所以我希望有人能提供或指出一个使用SpringLayout和SwingBuilder的简单例子。特别是如何指定约束,因为在我看到的所有SwingBuilder示例中,每个小部件实例都是在没有命名实例的情况下动态创建的。那么,对于相对约束,我如

我正在尝试快速轻松地布局按钮和标签的行和列。按钮和标签的宽度相同看起来很可笑,所以我排除了
GridLayout
。如果有人建议
GridBagLayout
,我可能会割腕。所以我想
SpringLayout
是我最好的选择。但我不是Groovy专家,尤其是GUI方面

所以我希望有人能提供或指出一个使用SpringLayout和
SwingBuilder
的简单例子。特别是如何指定约束,因为在我看到的所有SwingBuilder示例中,每个小部件实例都是在没有命名实例的情况下动态创建的。那么,对于相对约束,我如何引用另一个同级或父级小部件呢?我在互联网上找不到任何可以解释这一点的东西


具有2行/2列的工作示例代码将获得胜利

您可以在节点中设置
id
,然后将
id
作为变量引用,例如:

import javax.swing.*
import groovy.swing.*

new SwingBuilder().edt {

    def layout = springLayout()

    frame(title: 'SpringLayout', visible: true, layout: layout) {
        label(id: 'label1', text: 'Label1: ')
        textField(id: 'textField1', columns: 15)
        label(id: 'label2', text: 'Label2: ')
        textField(id: 'textField2', columns: 15)
    }

    def label1Cons = layout.getConstraints(label1)
    label1Cons.setX(Spring.constant(5))
    label1Cons.setY(Spring.constant(5))
    def textField1Cons = layout.getConstraints(textField1)
    textField1Cons.setX(Spring.sum(Spring.constant(5), label1Cons.getConstraint(SpringLayout.EAST)))
    textField1Cons.setY(Spring.constant(5))

    def label2Cons = layout.getConstraints(label2)
    label2Cons.setX(Spring.constant(5))
    label2Cons.setY(Spring.sum(Spring.constant(30), label2Cons.getConstraint(SpringLayout.NORTH)))
    def textField2Cons = layout.getConstraints(textField2)
    textField2Cons.setX(Spring.sum(Spring.constant(5), label2Cons.getConstraint(SpringLayout.EAST)))
    textField2Cons.setY(Spring.sum(Spring.constant(25), textField1Cons.getConstraint(SpringLayout.NORTH)))

}
也许您应该尝试MigLayout以获得更简单的解决方案