Quelle est la différence entre Swing et AWT?

Quelqu’un peut-il s’il vous plaît m’expliquer quelle est la différence entre Swing et AWT?

Y a-t-il des cas où AWT est plus utile / conseillé que le swing ou vice-versa?

AWT est une interface Java pour le code graphique natif du système présent dans votre système d’exploitation. Cela ne fonctionnera pas de la même manière sur tous les systèmes, même si cela tente.

Swing est une interface graphique Java plus ou moins pure. Il utilise AWT pour créer une fenêtre de système d’exploitation, puis peint des images de boutons, d’étiquettes, de texte, de cases à cocher, etc. dans cette fenêtre et répond à tous vos clics de souris, entrées de clés, etc. au lieu de laisser le système d’exploitation le gérer. Ainsi, Swing est 100% portable et est le même sur toutes les plates-formes (bien qu’il soit skinnable et qu’il ait un aspect “pluggable” qui peut ressembler plus ou moins à l’apparence des fenêtres et des widgets natifs).

Ce sont des approches très différentes des outils GUI et ont beaucoup de conséquences. Une réponse complète à votre question tenterait d’explorer toutes ces questions. 🙂 Voici un couple:

AWT est une interface multiplate-forme, même si elle utilise le système d’exploitation sous-jacent ou la boîte à outils graphique native pour ses fonctionnalités, elle ne donne pas access à tout ce que ces outils peuvent faire. Les widgets AWT avancés ou récents pouvant 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 sockets en charge, ou pire, elles peuvent fonctionner différemment sur chaque plate-forme. Les gens investissaient beaucoup d’efforts pour que leurs applications AWT fonctionnent de manière cohérente sur toutes les plates-formes – par exemple, ils pouvaient essayer de passer des appels en code natif à partir de Java.

Comme AWT utilise des widgets d’interface graphique natifs, votre système d’exploitation les connaît et gère leur mise en face l’un de l’autre, alors que les widgets Swing sont des pixels sans signification dans une fenêtre du sharepoint vue de votre système d’exploitation. Swing lui-même gère la disposition et l’emstackment des widgets. Le mélange de AWT et de Swing est très peu pris en charge et peut conduire à des résultats ridicules, tels que des boutons natifs qui masquent tout le rest dans la boîte de dialog dans laquelle ils résident, car tout le rest a été créé avec Swing.

Étant donné que Swing essaie de faire tout ce qui est possible en Java autre que les routines graphiques très brutes fournies par une fenêtre graphique native, cela entraînait une pénalité de performance supérieure à celle de AWT. Swing a malheureusement pris du retard. Cependant, cela a considérablement diminué au cours des dernières années en raison de l’optimisation des JVM, de la rapidité des machines et de l’optimisation (je suppose) des composants internes Swing. Aujourd’hui, une application Swing peut fonctionner assez rapidement pour être utilisable, voire même zippy, et presque impossible à distinguer d’une application utilisant des widgets natifs. Certains diront qu’il a fallu beaucoup trop de temps pour arriver à ce stade, mais la plupart diront que cela en vaut la peine.

Enfin, vous pouvez également consulter SWT (le toolkit GUI utilisé pour Eclipse, et une alternative à AWT et Swing), ce qui revient en quelque sorte à l’idée AWT d’accéder aux widgets natifs via Java.

La différence de base que tout le monde a déjà mentionné est le poids lourd et le poids léger . Permettez-moi d’expliquer, en gros, que le terme «poids lourd» signifie que lorsque vous utilisez les composants awt, le code natif utilisé pour obtenir le composant de vue est généré par le système d’exploitation. Où, comme dans les composants swing, il incombe à JVM de générer la vue pour les composants. Une autre déclaration que j’ai vue est que swing est basé sur MVC et awt n’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 enveloppes pour les objects du système d’exploitation), tandis que Swing est construit sur AWT avec un ensemble plus riche de composants légers.

Tout travail sérieux sur l’interface utilisateur Java est effectué dans Swing, pas AWT, qui était principalement utilisé pour les applets.

Dans la mesure où AWT peut être plus utile que Swing –

  • vous ciblez peut-être une ancienne JVM ou une plate-forme qui ne prend pas en charge Swing. Si vous construisiez des applets, cela entrait en jeu – vous vouliez cibler le plus petit dénominateur commun pour que les utilisateurs n’aient pas à installer un plug-in Java plus récent. Je ne suis pas sûr de savoir quelle est la version la plus répandue du plug-in Java – cela peut être différent aujourd’hui.
  • Certaines personnes préfèrent l’aspect natif d’AWT sur les skins de plateforme «pas tout à fait» de Swing. (Il y a de meilleurs skins natifs tiers que les implémentations Swing BTW) Beaucoup de gens préféraient utiliser FileDialog d’AWT plutôt que FileChooser de Swing, car cela donnait la boîte de dialog

Plusieurs conséquences résultent de cette différence entre AWT et Swing.

AWT est une mince couche de code sur le système d’exploitation, tandis que Swing est beaucoup plus grande. Swing a également des fonctionnalités beaucoup plus riches. En utilisant AWT, vous devez implémenter beaucoup de choses vous-même, tandis que Swing les a intégrées. Étant donné que Swing implémente la fonctionnalité de l’interface graphique plutôt que de s’appuyer sur le système d’exploitation hôte, il peut offrir un environnement plus riche sur toutes les plates-formes sur lesquelles Java s’exécute. AWT est plus limité dans la fourniture des mêmes fonctionnalités sur toutes les plates-formes car toutes les plates-formes n’implémentent pas les mêmes contrôles de la même manière.

Les composants Swing sont appelés “légers” car ils ne nécessitent pas d’object de système d’exploitation natif pour implémenter leurs fonctionnalités. JDialog et JFrame sont des poids lourds, car ils ont un homologue. Les composants comme JButton , JTextArea , etc. sont légers car ils ne possèdent pas de pair de système d’exploitation.

Un homologue est un widget fourni par le système d’exploitation, tel qu’un object bouton ou un object de champ de saisie.

Balançoire:

  1. Swing fait partie des classes de base java.
  2. Les composants Swing sont indépendants de la plate-forme.
  3. Les composants Swing sont des composants légers, car le swing se trouve sur le dessus du poids.

AWT:

  1. AWT s’appelle l’outil de fenêtre abstraite.
  2. Les composants AWT dépendent de la plate-forme.
  3. Les composants AWT sont des composants lourds.
  • composant swing fournit une interface utilisateur beaucoup plus flexible car il suit le contrôleur de vue de modèle (mvc).
  • awt n’est pas basé sur le mvc.
  • swing fonctionne plus vite.
  • awt ne fonctionne pas plus vite.
  • les composants swing sont légers.
  • Les composants awt sont lourds.
  • swing occupe moins d’espace mémoire.
  • awt occupe plus d’espace mémoire.
  • composant swing est indépendant de la plate-forme.
  • awt dépend de la plate-forme.
  • swing nécessite le paquet javax.swing.
  • awt nécessite un package javax.awt.

AWT 1. AWT occupe plus d’espace mémoire 2. AWT dépend de la plate-forme 3. AWT nécessite un package javax.awt

balançoires 1. Le swing occupe moins d’espace mémoire 2. Le composant Swing est indépendant de la plate-forme 3. Swing nécessite le package javax.swing