suggestions pour la programmation par interface graphique déclarative en Java

Je me demande s’il existe des suggestions pour la programmation d’interface graphique déclarative en Java. (J’abhorre les logiciels de création / d’édition d’interfaces graphiques, mais je suis un peu fatigué d’instancier manuellement JPanels et Boxes, JLabels et JLists, etc.)

C’est ma question générale, mais j’ai deux questions spécifiques sur les approches que je pense prendre:

  1. JavaFX: existe-t-il un exemple d’interface graphique réaliste (par exemple, pas de cercles et de rectangles, mais de listes et boutons et étiquettes similaires) dans JavaFX, pouvant s’interfacer avec un fichier source Java qui accède à divers éléments?

  2. Plain Old Swing avec quelque chose pour parsingr XML XUL-ish: quelqu’un a-t-il inventé une syntaxe déclarative (comme XUL) pour XML à utiliser avec Java Swing? Je suppose que cela ne serait pas difficile à faire, créer un code basé sur STaX qui lit un fichier XML, instancie une hiérarchie d’éléments Swing et rend la hiérarchie accessible via une sorte de modèle d’object. Mais je préfère utiliser quelque chose de bien connu et documenté et testé que d’essayer d’inventer une telle chose moi-même.

  3. JGoodies Forms – pas exactement déclaratif, mais un peu proche et j’ai eu de la chance avec JGoodies Binding. Mais leur syntaxe pour la mise en forme de formulaire semble assez cryptique.

edit: beaucoup de bonnes réponses ici! (Et j’ai ajouté le n ° 3 ci-dessus) Je vous serais particulièrement reconnaissant d’entendre toutes les expériences que vous avez eues sur l’utilisation de l’un de ces frameworks pour des applications réelles.

ps J’ai essayé quelques recherches sur google (“java gui declarative”), je ne savais pas trop quoi chercher.

Vous pourriez jeter un oeil à javabuilders ; Il utilise YAML pour créer des interfaces utilisateur Swing.

Un exemple simple du manuel [PDF]:

JFrame: name: myFrame title: My Frame content: - JLabel: name: myLabel2 text: My First Label - JLabel: name: myLabel2 text: My Second Label 

Alternativement:

 JFrame: name: myFrame title: My Frame content: - JLabel: {name: myLabel2, text: My First Label} - JLabel: {name: myLabel2, text: My Second Label} 

Ou même:

 JFrame(name=myFrame,title=My Frame): - JLabel(name=myLabel2, text=My First Label) - JLabel(name=myLabel2, text=My Second Label) 

En tant qu’auteur de CookSwing, un outil qui fait ce dont vous avez besoin, j’ai longuement examiné ce sujet avant de procéder à l’implémentation. J’ai gagné ma vie en écrivant des applications d’interface graphique Java Swing.

IMO, si vous envisagez d’utiliser des langages de programmation impératifs pour décrire le composant Java Swing, vous pourriez aussi bien utiliser Java. Groovy etc ajoute seulement des complications sans beaucoup de simplification.

Les langages déclaratifs sont bien meilleurs, car même les non-programmeurs peuvent les comprendre, en particulier lorsque vous devez déléguer aux artistes la mise au sharepoint mises en page spécifiques. XML est parfait pour les langages déclaratifs (par rapport aux autres choix) en raison de la simplicité, de la lisibilité et des nombreux éditeurs / outils de transformation disponibles.

Voici les problèmes rencontrés dans la programmation GUI déclarative, pas dans un ordre particulier. Ces problèmes ont été abordés dans CookSwing.

  1. Lisibilité et simplicité. (JavaFX n’est pas plus simple que XML. La fermeture des balises XML aide à lire un peu, et n’ajoute pas beaucoup de frappe car les éditeurs XML le font généralement pour vous)
  2. Extensibilité. Très important, car les composants Swing personnalisés apparaîtront pour tous les projets non sortingviaux.
  3. Dispositions graphiques Aussi très important. Être capable de gérer BorderLayout, GridBagLayout, JGoodies FormsLayout, etc. sont pratiquement indispensables.
  4. Simplicité de copier / coller. Au cours de la conception de la mise en page, il est nécessaire d’essayer différents. Il faut donc pouvoir copier / coller et déplacer les choses. XML est préférable car la hiérarchie des composants et des dispositions est facile à voir. JavaFX est quelque peu problématique en raison des atsortingbuts multilignes et des problèmes d’indentation. Avoir un bon éditeur est un must, et il y a beaucoup de bons éditeurs XML.
  5. Les modèles (c.-à-d. Être en mesure d’inclure un autre fichier de mise en page) sont très utiles pour un aspect cohérent. Par exemple, on pourrait vouloir avoir une apparence cohérente des dialogs, des panneaux de boutons, etc.
  6. Interactions avec le code Java. Ceci est crucial. Certains composants d’interface graphique ne peuvent être créés qu’avec du code Java (quelle qu’en soit la raison). Il faut donc pouvoir charger ces objects. Il est également nécessaire de connecter directement les auditeurs et autres objects / composants Java au code XML. Utiliser des identifiants pour les connecter plus tard ne fonctionnera pas correctement, car il est très fastidieux.
  7. Internationalisation (i18n). Être capable de charger du texte / de la chaîne à partir d’un ensemble de ressources plutôt que du texte codé en dur. Cette fonctionnalité peut être cruciale pour certaines applications.
  8. Localisation (l10n). L’avantage de la programmation déclarative (en particulier avec XML) est que vous pouvez simplement basculer vers un formulaire graphique différent pour un environnement local spécifique. Si vous codez avec Java ou tout autre langage impératif, ce n’est pas si facile.
  9. Vérification des erreurs / tolérance. Les conceptions initiales contiennent souvent des erreurs ici et là. Parfois, l’erreur peut être due au fait que le code Java correspondant n’a pas encore été conçu. Ou une ressource d’icône est manquante. Traiter les erreurs avec un codage impératif est extrêmement fastidieux. Il est donc souhaitable de pouvoir localiser les erreurs tout en tolérant les erreurs, de sorte que l’aperçu de la présentation de l’interface utilisateur graphique puisse être effectué le plus tôt possible.
  10. Remplacement de composant graphique C’est-à-dire remplacer le champ de texte qui contenait JTextField avec une version plus sophistiquée des composants. Remplacez le sens de la boîte de dialog par des boîtes de dialog de l’interface utilisateur sophistiquées (telles que JIDE) au lieu de JDialog. Cette fonctionnalité peut économiser beaucoup d’efforts. XML lui-même est également utile en raison de XSLT et d’autres outils de transformation.
  11. Au-delà de la balançoire. Parce que tôt ou tard, vous trouverez de nombreuses configurations de composants utilisant des types d’objects tels que des tableaux, des icons, des images, des vecteurs, etc.

Si la concision est importante, vous pourriez vouloir considérer l’idiome à double accolade:

 new JFrame("My Frame") {{ setName("myFrame"); add(new JLabel("My First Label") {{ setName("myLabel2"); }}; add(new JLabel("My Second Label") {{ setName("myLabel2"); }}; }} 

Vous ne perdez alors pas la puissance d’un langage de programmation généraliste bien connu (vous savez que vous en aurez besoin, et JellyTags suce). Tout ce dont vous avez besoin est le petit idiome supplémentaire.

Il n’est pas très utilisé, car en réalité, les utilisateurs de XML ne résolvent pas vraiment de problèmes.

En général, vous pouvez utiliser des couches de générateur pour résumer le code répété. Le code GUI n’a pas besoin d’être mal écrit, c’est juste que la quasi-totalité est (y compris dans les manuels).

Je recommande fortement MiG Layout – il faut quelques jours pour s’habituer à la syntaxe, mais une fois que vous l’avez, cela fonctionne à merveille. J’ai utilisé JGoodies Forms pendant un certain temps, et le concept de constructeur de Karsten fonctionne bien, mais il est un peu crypté … MiG est plus facile à prendre en main et donne un code parfaitement concis.

Si vous êtes prêt à sortir un peu du langage Java, le concept “générateur” de Groovy fonctionne plutôt bien avec les interfaces graphiques. Bien sûr, vous pouvez interagir assez facilement entre Groovy et Java. Voir la page Swing Builder pour plus d’informations.

essayez Swiby: http://swiby.codehaus.org/

“Swiby est un mélange de Swing et de Ruby pour des applications dissortingbuées vraiment riches.” En d’autres termes, Swiby est un langage spécifique à un domaine mélangeant swing et ruby.

SDL / Swing fait exactement ce dont vous avez besoin. C’est un framework Swing déclaratif simple (283k), discret et facile à apprendre.

 menus { "File" { "Open" do="open" // calls "open()" in the controller "---" "Exit" do="exit" } } 

SDL / Swing est open source mais bénéficie d’un support commercial. Nous (Ikayzo.com) l’avons développé au fil des ans et l’avons déployé dans des systèmes de production pour de nombreux clients, allant des sociétés des sciences de la vie aux banques.

Je peux trouver les exemples suivants de ce que vous demandez:

  • SWIXML
  • SwiXAT L’outil de création Swing-XML (basé sur SWIXML)
  • CookSwing: XML pour Swing GUI
  • JFCML – Langage de balisage XML JFC / Swing
  • peut-être JEasy , je ne suis pas sûr

J’ai récemment rencontré SDL / Swing .

quelque chose de nouveau … XWT , sera inclus dans eclipse e4

J’ai essayé de nombreuses solutions, telles que SWIXML, Javabuilders, MigLayout, Cookswing. J’ai enfin trouvé javaFX et javaFX-Scenebuilder la solution la plus rapide, un outil graphique basé sur XML. vous souhaitez que la manière dont scenebuilder crée une interface graphique (avec des éléments de glisser-déposer!). De plus, il utilise des feuilles de style en cascade (CSS) pour le thème de l’interface graphique. Jsut fait confiance à Oracle, c’est le meilleur outil graphique pour les applications Java. faire un tour pour créer des applications javaFX avec scenebuilder, ici: http://docs.oracle.com/javafx/scenebuilder/1/get_started/prepare-for-tutorial.htm#CEGJBHHA

Bien qu’il ne soit pas déclaratif et qu’il se limite exclusivement aux mises en page, vous pouvez consulter DesignGridLayout qui permet de définir par programmation les mises en page Swing de manière très concise (c’est un open source).

Principaux avantages:

  • facile et rapide à apprendre.
  • code concis (1 ligne de code par ligne de composants dans un formulaire) qui permet également une maintenance facile
  • vérification à la compilation (que l’interface utilisateur déclarative ne peut pas avoir)
  • respect de l’aspect et de la sensation de la plate-forme (alignement de la ligne de base, écarts entre les composants …) sans aucune valeur de longueur codée en dur

Comme toujours, il est toujours judicieux d’effectuer une recherche lorsque vous cherchez quelque chose. Ceci est le premier lien dans Google en recherchant “java xml gui”

WindowBuilder , c’est un très bon plugin, qui incluait GWT, XWT, SWT, Swing etc.