Я не знаю о такой библиотеке, хотя было бы возможно что-то подобное (без именованных параметров, что снижает читабельность). Кто-то, возможно, преобразовал SwingBuilder в Java.
[Похоже, вы можете получить исходный код Java для SwingBuilder в http://kickjava.com/src/groovy/swing/SwingBuilder.java.htm. Я не знаю, насколько это актуально]
Самое простое, что вы можете получить на простом языке 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() {{ ... }}
это фактически создание нового определения класса. Я бы не рекомендовал делать это очень часто из-за этого.