是否有一个库可以编写基于 Swing 的 GUI,类似于Groovy 中的SwingBuilder所做的方式?
我希望开发一个 Java GUI 应用程序而不在 Java 中嵌入 Groovy 或其他完整的编程语言,我发现标准的 Java 语法相当乏味。
是否有一个库可以编写基于 Swing 的 GUI,类似于Groovy 中的SwingBuilder所做的方式?
我希望开发一个 Java GUI 应用程序而不在 Java 中嵌入 Groovy 或其他完整的编程语言,我发现标准的 Java 语法相当乏味。
我不知道这样的库,尽管可能会有类似的东西(但没有命名参数,这会降低可读性)。有人可能已经将 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() {{ ... }}
它实际上是在创建一个新的类定义。因此,我不建议经常这样做。
我曾经沿着这条路走下去,然后我找到了 MiGLayout - 除非我使用拆分窗格,否则我通常可以在一个面板中布置我的每个视图,而麻烦最少。有一点学习曲线,但是一旦你克服了困难,你几乎可以立即敲出一个非常漂亮的 GUI。
对于很多设计来说,在其他面板中嵌套面板的整个范例并不干净——你最终会与布局管理器作斗争。