SwingBuilder就像Java的GUI语法一样?

时间:2010-10-25 21:00:45

标签: java swing swingbuilder

是否有一个库可以编写基于Swing的GUI,类似于Groovy中SwingBuilder所做的方式?

我希望开发一个Java GUI应用程序,而无需在Java中嵌入Groovy或其他完整的编程语言,我发现标准的Java语法相当繁琐。

2 个答案:

答案 0 :(得分:1)

我不知道这样的库,虽然类似的东西是可能的(但是没有命名参数,这会降低可读性)。有人可能已将SwingBuilder转换为java。

[看起来你可以在http://kickjava.com/src/groovy/swing/SwingBuilder.java.htm获得SwingBuilder的java源代码。我不知道当前的情况如何]

关于普通java中最接近的是使用“双卷曲技巧”(这不是一个技巧,只是一个匿名的内部类定义)。

引用页面上的SwingBuilder示例:

new SwingBuilder().edt {
    frame(title:'Frame', size:[300,300], show: true) {
    borderLayout()
    textlabel = label(text:"Click the button!", constraints: BL.NORTH) 
    button(text:'Click Me',
           actionPerformed: {
               count++;
               textlabel.text = "Clicked  ${count} time(s).";
               println "clicked"},
               constraints:BL.SOUTH)
    }
}

可以写成类似Java中的以下内容

new JFrame() {{
    setTitle("Frame");
    setSize(300,300);
    setLayout(new BorderLayout());
    textlabel = new JLabel("Click the button!");
    add(textlabel, BorderLayout.NORTH);
    add(new JButton("Click Me") {{
        addActionListener(new ActionListener() {
            @Override public void actionPerformed(ActionEvent e) {
                count++;
                textlabel.setText("Clicked " + count + " time(s).");
                System.out.println("clicked");
        }});
    }}, BorderLayout.SOUTH);
    setVisible(true);
}};

注意:这里的问题是当你使用

new SomeClass() {{ ... }}

它实际上是在创建一个新的类定义。因此,我不建议经常这样做。

答案 1 :(得分:1)

我一度走下这条路,然后我发现MiGLayout - 除非我使用的是分割窗格,否则我通常可以在一个面板中布置我的每个视图,而且麻烦最少。有一点学习曲线,但是一旦你越过驼峰,你几乎可以立刻淘汰一个非常漂亮的GUI。

在其他面板中嵌套面板的整个范例对于很多设计来说并不干净 - 你最终会对布局管理器起作用。