Я не знаю о такой библиотеке, хотя нечто подобное было бы возможно (правда, без именованных параметров, что снижает читабельность). Кто-то мог преобразовать 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() {{ ... }}
это фактически создание нового определения класса. Я бы не рекомендовал делать это очень часто из-за этого.
person
Scott Stanchfield
schedule
25.10.2010