Existe-t-il une bibliothèque qui permet d'écrire des interfaces graphiques basées sur Swing de la même manière que SwingBuilder dans Groovy? Je souhaite développer une application Java GUI sans embarquer Groovy ou un autre langage de programmation complet en Java, et je trouve la syntaxe Java standard plutôt fastidieuse.SwingBuilder comme la syntaxe GUI pour Java?
Répondre
Je suis allé sur ce chemin à un moment donné, puis j'ai trouvé MiGLayout - à moins que j'utilise un volet fractionné, je peux généralement agencer chacune de mes vues dans un seul panneau, avec un minimum de tracas. Il y a un peu de courbe d'apprentissage, mais une fois que vous êtes au-dessus de la bosse, vous pouvez éliminer une très belle interface graphique en un rien de temps.
Tout le paradigme des panneaux d'emboîtement à l'intérieur d'autres panneaux n'est pas propre à un grand nombre de conceptions - vous finissez par combattre le gestionnaire de disposition.
Je ne suis pas au courant d'une telle bibliothèque, même si quelque chose de similaire serait possible (sans paramètres nommés, cependant, ce qui réduit la lisibilité). Quelqu'un peut avoir converti SwingBuilder en Java.
[On dirait que vous pouvez obtenir une source java pour SwingBuilder au http://kickjava.com/src/groovy/swing/SwingBuilder.java.htm. A propos du plus proche, vous pouvez entrer en java est d'utiliser le "double tour bouclé" (qui n'est pas vraiment un tour, juste une définition de classe interne anonyme).
L'exemple SwingBuilder sur votre page référencée:
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)
}
}
pourrait être écrit quelque chose comme ce qui suit dans 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);
}};
NOTE: Le problème est que lorsque vous utilisez
new SomeClass() {{ ... }}
En fait, il crée une nouvelle définition de classe. Je ne recommanderais pas de le faire très souvent à cause de cela.
Cela me semble bon. Merci. –