【问题标题】:SpringLayout with SwingBuilder带有 SwingBuilder 的 SpringLayout
【发布时间】:2014-08-13 22:53:24
【问题描述】:
我正在尝试快速轻松地布局按钮和标签的行和列。按钮和标签的宽度相同看起来很荒谬,所以我排除了GridLayout。如果有人建议GridBagLayout,我可能会割腕。所以我在想SpringLayout 是我最好的选择。但我不是 Groovy 专家,尤其是 GUI 方面。
所以我希望有人可以提供或指出一个使用 SpringLayout 和SwingBuilder 的简单示例。特别是如何指定约束,因为在我看到的所有 SwingBuilder 示例中,每个小部件实例都是在没有命名实例的情况下动态创建的。那么我将如何为相对约束引用另一个兄弟或父小部件?我在互联网上没有找到任何可以解释这一点的东西。
2 行/2 列的工作示例代码将获得胜利!
【问题讨论】:
标签:
groovy
swingbuilder
springlayout
【解决方案1】:
您可以在节点中设置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 以获得更简单的解决方案。