是否有一个库可以编写基于Swing的GUI,类似于Groovy中SwingBuilder所做的方式?
我希望开发一个Java GUI应用程序,而无需在Java中嵌入Groovy或其他完整的编程语言,我发现标准的Java语法相当繁琐。
答案 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。
在其他面板中嵌套面板的整个范例对于很多设计来说并不干净 - 你最终会对布局管理器起作用。