2

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

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

4

2 回答 2

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() {{ ... }}

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

于 2010-10-25T21:29:21.817 回答
1

我曾经沿着这条路走下去,然后我找到了 MiGLayout - 除非我使用拆分窗格,否则我通常可以在一个面板中布置我的每个视图,而麻烦最少。有一点学习曲线,但是一旦你克服了困难,你几乎可以立即敲出一个非常漂亮的 GUI。

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

于 2010-10-26T04:00:47.927 回答