En faisant mes recherches préliminaires sur cette question , j'ai constaté qu'il n'y avait pas beaucoup d'informations bien organisées sur les meilleures pratiques Java Swing sur Internet. Je pense donc que je vais essayer Stack Exchange de construire cette One Great List.
Quelles sont les meilleures pratiques de développement Java Swing? Qu'avez-vous trouvé pour travailler pour vous et pourquoi?
Réponses:
Je ne peux que répondre de ce qui a fonctionné pour moi. D'autres commentateurs ont souligné que les interfaces graphiques Java en général tombent dans la «vallée étrange» de l'apparence pas tout à fait native, et je ne conteste pas cela.
Faites bon usage de l'API Action. Il vous permet de mieux encapsuler les différentes actions que votre utilisateur effectuera et vous permet de les connecter aux raccourcis, touches accélératrices, boutons et autres objets d'entrée beaucoup plus facilement.
Utilisez un gestionnaire de mise en page approprié. GridBagLayout est extrêmement puissant, mais j'irais jusqu'à dire qu'il est impossible à maintenir sans une quantité excessive de commentaires. Lorsque j'exécute des outils d'analyse de code statique tels que Sonar sur une ancienne application graphique que je maintiens, cela souligne toujours les quantités massives de nombres magiques pour rendre la mise en page GridBags parfaite. J'ai eu beaucoup de succès avec GroupLayout, ce qui évite d'avoir à spécifier un alignement parfait au pixel près.
Si vous pensez avoir besoin d'un JDialog ... vous n'en avez probablement pas. Les boîtes de dialogue sont horribles, en termes d'expérience utilisateur - cette application a décidé de les utiliser pour chaque menu et formulaire, et d'appliquer des règles toujours au top de manière bizarre. Cela s'est transformé en cauchemar de maintenance alors que nous avions effectivement besoin d'alerter quelque chose sur le menu. Cue frustré de cliquer sur des dialogues non focalisés - et donc indissociables -.
Utilisez SwingWorker au lieu de lancer votre propre multithreading, le cas échéant. Il est très facile d'étendre SwingWorker et d'effectuer des tâches de longue durée tout en fournissant des mises à jour régulières à l'interface graphique. Pensez à télécharger une mise à jour client. Il gérera la planification des threads de travail pour vous et vous permettra de publier des pourcentages de téléchargement dans la vue, afin que vous puissiez mettre à jour votre barre de progression ou ce que vous avez.
C'est tout ce que je peux suggérer, dans mon expérience certes limitée.
la source
JDialog
est parfaitement bien - tant que vous l'utilisez pour les dialogues.JDialog
ou non).Je dirais que l'une des premières choses est de ne pas y travailler directement. Le système de mise en page de Swing (IMHO) est terrible, et essayer d'en faire une application substantielle est un cauchemar.
Deux des nombreux gestionnaires de mise en page alternatifs que j'ai utilisés sont la mise en page MigLayout et MultiSplitPane. MigLayout est plus généraliste et crée n'importe quelle mise en page à laquelle vous pouvez penser d'une manière simple et saine. MultiSplitPane est plus spécifique; Je l'ai utilisé pour faire des dispositions simples pour les interfaces graphiques qui n'avaient pas beaucoup de complexité.
EDIT : Cela ne remplace pas le swing . Si vous devez utiliser Swing, vous pouvez toujours utiliser ces gestionnaires de disposition, car ils ne gèrent que le swing, pas le remplacer.
Bien sûr, la meilleure alternative est de ne pas utiliser Swing. Swing est fortement critiqué pour être horrible à travailler, ne semble pas natif et lent. Il existe de nombreuses alternatives qui ont appris de swing ce qu'il ne faut pas faire comme Qt, SWT, et je pense même GTK. Ce sont d'excellentes solutions à long terme aux maux de tête de Swing
EDIT : Comme l'a dit @Lord Torgamus, ceux-ci ne sont pas vraiment disponibles si vous êtes obligé d'utiliser Swing. Si vous comptez les utiliser de son mieux pour régler cela lorsque vous créez votre projet, et non les 3/4 en cours de route ou lors de la récupération des applications héritées.
Je voudrais également noter que la plupart des interfaces graphiques alternatives utilisent des bibliothèques natives pour ressembler au système d'exploitation, puis retombent sur Swing ou sur une autre interface graphique Pure Java.
la source