Quelle est la différence entre Swing et AWT?
Quelqu'un peut-il m'expliquer quelle est la différence entre Swing et AWT?
Y a-t-il des cas où AWT est plus utile/conseillé d'utiliser que swing ou vice-versa?
8 réponses
AWT est une interface Java au code GUI système natif présent dans votre système d'exploitation. Il ne fonctionnera pas de la même manière sur tous les systèmes, bien qu'il essaie.
Swing est une interface graphique Java plus ou moins pure. Il utilise AWT pour créer une fenêtre du système d'exploitation, puis peint des images de boutons, étiquettes, texte, cases à cocher, etc., dans cette fenêtre et répond à tous vos clics de souris, entrées clés, etc., décider pour lui-même ce qu'il faut faire au lieu de laisser le système d'exploitation gérer. Ainsi Swing est 100% portable et est le même sur toutes les plates-formes (bien qu'il soit skinnable et ait un "look and feel enfichable" qui peut le faire ressembler plus ou moins à la façon dont les fenêtres et les widgets natifs ressembleraient).
Ce sont des approches très différentes des boîtes à outils GUI et ont beaucoup de conséquences. Une réponse complète à votre question essaierait d'explorer tous ceux-ci. :) Voici un couple:
AWT est une interface multi-plateforme, donc même si elle utilise le système d'exploitation sous-jacent ou la boîte à outils GUI native pour ses fonctionnalités, il ne donne pas accès à tout ce que ces boîtes à outils peuvent faire. Les widgets AWT avancés ou plus récents qui peuvent exister sur une plate-forme peuvent ne pas être pris en charge sur une autre. Les fonctionnalités des widgets qui ne sont pas les mêmes sur chaque plate-forme peuvent ne pas être prises en charge, ou pire, elles peuvent fonctionner différemment sur chaque plate-forme. Les gens avaient l'habitude d'investir beaucoup d'efforts pour que leurs applications AWT fonctionnent de manière cohérente sur toutes les plates-formes - par exemple, ils peuvent essayer de faire des appels dans du code natif à partir de Java.
Parce QU'AWT utilise des widgets GUI natifs, votre système d'exploitation les connaît et gère les mettre les uns devant les autres, etc., alors que les widgets Swing sont des pixels dénués de sens dans une fenêtre du point de vue de votre système d'exploitation. Swing lui-même gère la mise en page et l'empilement de vos widgets. Le mélange AWT et Swing est très non pris en charge et peut conduire à des résultats ridicules, tels que les boutons natifs qui obscurcissent tout le reste dans la boîte de dialogue dans laquelle ils résident parce que tout le reste a été créé avec Swing.
Parce que Swing essaie de faire tout son possible en Java autre que les routines graphiques très brutes fournies par une fenêtre GUI native, il encourait une pénalité de performance par rapport à AWT. Cela a fait Swing malheureusement lent à attraper. Cependant, cela a considérablement diminué au cours des dernières années en raison de JVM plus optimisées, de machines plus rapides et (je présume) d'optimisation des internes Swing. Aujourd'hui une application Swing peut fonctionner assez vite pour être réparable ou même zippy, et presque indiscernable d'une application utilisant des widgets natifs. Certains diront qu'il a fallu beaucoup trop de temps pour arriver à ce point, mais la plupart diront que cela en vaut la peine.
Enfin, vous pouvez également consulter SWT (la boîte à outils GUI utilisée pour Eclipse, et une alternative à AWT et Swing), ce qui est un peu un retour à L'idée AWT d'accéder à des Widgets natifs via Java.
La différence de base que tout le monde a déjà mentionnée est que l'un est poids lourd et l'autre est Poids léger. Permettez-moi d'expliquer, fondamentalement ce que le terme heavy weight signifie est que lorsque vous utilisez les composants awt, le code natif utilisé pour obtenir le composant view est généré par le système d'exploitation, c'est pourquoi le look and feel change D'OS en OS. Où, comme dans les composants swing, c'est la responsabilité de JVM de générer la vue pour composant. une autre déclaration que j'ai vu est que swing est basé sur MVC et awt ne l'est pas.
Swing vs AWT . Fondamentalement, AWT est venu en premier et est un ensemble de composants D'interface utilisateur lourds (ce qui signifie qu'ils sont des wrappers pour les objets du système d'exploitation) alors que Swing construit au-dessus D'AWT avec un ensemble plus riche de composants légers.
Tout travail sérieux de L'interface utilisateur Java est effectué dans Swing not AWT, qui a été principalement utilisé pour les applets.
Dans la mesure où AWT peut être plus utile que Swing -
- vous ciblez peut-être une JVM ou une plate-forme plus ancienne qui ne prend pas en charge Swing. Cela entrait vraiment en jeu si vous construisiez des Applets-vous vouliez cibler le plus petit dénominateur commun afin que les gens n'aient pas à installer un plugin Java plus récent. Je ne suis pas sûr de la version actuelle la plus largement installée du plugin Java - cela peut être différent aujourd'hui.
- Certaines personnes préfèrent le look natif de AWT sur Les skins de plate-forme "pas tout à fait là" de Swing. (Il y a de meilleures peaux natives 3rd party que les implémentations de Swing BTW) beaucoup de gens ont préféré utiliser FileDialog D'AWT sur FileChooser de Swing car il a donné la boîte de dialogue de fichier de plate-forme à laquelle la plupart des gens étaient habitués plutôt que le 'bizarre' Swing Personnalisé.
Plusieurs conséquences résultent de cette différence entre AWT et Swing.
AWT est une fine couche de code sur le système D'exploitation, alors que Swing est beaucoup plus grand. Swing a également des fonctionnalités beaucoup plus riches. En utilisant AWT, vous devez implémentez beaucoup de choses vous-même, tandis que Swing les a intégrées. Pour GUI-travail intensif, AWT se sent très primitif à travailler avec par rapport à Swing. Parce que Swing implémente la fonctionnalité GUI elle-même plutôt que de compter sur le hôte OS, il peut offrir un plus riche environnement sur toutes les plates-formes Java fonctionne. AWT est plus limité dans la fourniture de la même fonctionnalité sur toutes les plateformes parce que toutes les plates-formes n'implémentent pas les mêmes contrôles dans le même façon.
Les composants pivotants sont appelés "légers" car ils ne nécessitent pas
objet OS natif pour implémenter leurs fonctionnalités. JDialog
et JFrame
sont
poids lourd, parce qu'ils ont un pair. Donc, des composants comme JButton
,
JTextArea
, etc., sont légers parce qu'ils n'ont pas de pair OS.
Un pairs est un widget fourni par le système d'exploitation, tel qu'un objet bouton ou un objet champ de saisie.
Swing:
- Swing fait partie des classes java foundation.
- Les composants Swing sont indépendants de la plate-forme.
- Les composants Swing sont des composants légers car swing se trouve sur le dessus de awt.
AWT:
- AWT est appelé l'outil de fenêtre abstraite.
- Les composants AWT dépendent de la plate-forme.
- Les composants AWT sont des composants lourds.
- composant swing fournir beaucoup interface utilisateur flexible parce qu'il suivez le modèle-vue-contrôleur(mvc).
- awt n'est pas basé sur mvc.
- swing fonctionne plus vite.
- awt ne fonctionne pas plus vite.
- Les composants d'oscillation sont légers.
- Les composants awt sont lourds.
- swing occupe moins d'espace mémoire.
- awt occupe plus d'espace mémoire.
- le composant swing est indépendant de la plate-forme.
- awt dépend de la plate-forme.
- swing besoin javax.forfait swing.
- awt nécessite javax.package awt.
AWT 1 . AWT occupe plus d'espace mémoire 2 . AWT dépend de la plate-forme 3 . AWT nécessite javax.paquet awt
Les Sautes d' 1 . Swing occupe moins d'espace mémoire 2 . Composant Swing est indépendant de la plateforme 3 . Swing nécessite javax.paquet d'oscillation