使用Groovy SwingBuilder进行组件放置的麻烦

时间:2013-10-04 15:14:42

标签: groovy

我是一名Java开发人员,并在Java中完成了GUI应用程序构建。我是Groovy的新手,坦率地说,我对几点感到困惑。

我的问题是我有以下代码。在组件放置的所有约束中,只有JButton.CENTER受到尊重。所有其他人都被忽略了。顶级' apanel'除非我注释掉bpanel的所有代码,否则不会显示。我已经尝试了各种其他派生元素的放置而没有工作 - 一些在运行时编译和错误,一些根本没有错误 - 比如这些 - 但是没有得到尊重。这是代码。非常感谢您提前寻求帮助。另外,对于那些在Groovy中进行GUI工作的人,你使用SwingBuilder,还是像在Java中那样编写代码?

    import java.awt.*  
import javax.swing.*  
import groovy.swing.SwingBuilder  
import java.awt.BorderLayout as BL  

name = "ATestGroovyGui"  
builder = new SwingBuilder().edt {  
    frame(title: name, show: true, pack: true, defaultCloseOperation:JFrame.EXIT_ON_CLOSE) {  
        apanel  = panel() {  
            gridLayout(cols: 2, rows: 2)  
            label(text: "These", horizontalTextPosition: JLabel.CENTER)  
            label(text: "are", horizontalTextPosition: JLabel.CENTER)  
            label(text: "four", horizontalTextPosition: JLabel.CENTER)  
            label(text: "labels", horizontalTextPosition: JLabel.CENTER)  
            constraints: BL.CENTER  
        }  
        bpanel  = panel() {  
            borderLayout()  
            alabel  = label(text: "alabel",  
                 horizontalTextPosition: JLabel.CENTER,  
                 constraints: BorderLayout.WEST)  
            abutton = button(text: "abutton",  
                actionPerformed: { alabel.text = "changed" },  
                horizontalTextPosition: JButton.CENTER,  
                constraints: BorderLayout.EAST )  
            constraints: BL.SOUTH  
            println name + " button hit"  
        }  
    }  
}  

1 个答案:

答案 0 :(得分:2)

我建议您将Miglayout用于任何复杂的UI。有一点学习曲线,但以后会容易得多。 SwingBuilder很好地支持Miglayout,尽管没有太多文档或示例可用。我曾经写过several posts about Miglayout and Swingbuilder here,你可以看看。