web-dev-qa-db-fra.com

Quelle est la différence entre Swing et AWT?

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

Existe-t-il des cas où AWT est plus utile/conseillé à utiliser que swing ou vice-versa?

213
Samiksha

AWT est une interface Java pour le code d'interface graphique système native présente dans votre système d'exploitation. Cela ne fonctionnera pas de la même manière sur tous les systèmes, même s’il essaie.

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 y peint des images de boutons, d’étiquettes, de texte, de cases à cocher, etc., et répond à tous vos clics de souris, entrées au clavier, etc., en décidant par lui-même quoi faire. au lieu de laisser le système d'exploitation le gérer. Ainsi, Swing est 100% portable et est identique sur toutes les plates-formes (bien qu'il soit modulable et présente une "apparence" qui puisse lui donner une apparence plus ou moins semblable à celle des fenêtres et des widgets natifs).

Ce sont des approches très différentes des boîtes à outils d'interface graphique 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 multi-plateforme. Par conséquent, même s'il utilise le système d'exploitation sous-jacent ou le kit d'outils de l'interface graphique native pour ses fonctionnalités, il ne donne pas accès à tout ce que ces kits peuvent faire. Les widgets AWT avancés ou plus récents pouvant exister sur une plate-forme peuvent ne pas être pris en charge sur une autre. Les fonctionnalités de widgets qui ne sont pas identiques sur chaque plate-forme peuvent ne pas être prises en charge, ou pire, elles peuvent fonctionner différemment sur chaque plate-forme. Auparavant, les utilisateurs déployaient beaucoup d'efforts pour faire en sorte que leurs applications AWT fonctionnent de manière cohérente sur toutes les plates-formes. Par exemple, ils peuvent essayer de passer des appels en code natif à partir de Java.

AWT utilisant des widgets d'interface graphique natifs, votre système d'exploitation les connaît et gère de les placer l'un en face de l'autre, etc., tandis que les widgets Swing sont des pixels sans signification dans une fenêtre du point de vue de votre système d'exploitation. Swing gère lui-même la disposition et l'empilement de vos widgets. Mélanger AWT et Swing est hautement non pris en charge et peut conduire à des résultats ridicules, tels que des boutons natifs qui masquent tout le reste de la boîte de dialogue dans laquelle ils résident, car tout le reste a été créé avec Swing.

Dans la mesure où Swing tente de faire tout ce qui est possible dans Java autre que les routines graphiques très brutes fournies par une fenêtre d'interface graphique native, il entraînait une pénalité en termes de performances par rapport à AWT. Cela a malheureusement ralenti le succès de Swing. Toutefois, ces dernières années, le nombre de machines virtuelles Java optimisées, de machines plus rapides et (je présume) optimisées des composants internes de Swing a considérablement diminué. De nos jours, une application Swing peut être exécutée assez rapidement pour être réparable ou même rapide, et il est presque impossible de la distinguer d'une application utilisant des widgets natifs. Certains diront qu'il a fallu beaucoup trop de temps pour en arriver là, mais la plupart diront que cela en vaut la peine.

Enfin, vous pouvez également consulter SWT (la boîte à outils d'interface graphique utilisée pour Eclipse et une alternative à AWT et Swing), qui est en quelque sorte un retour à l'idée d'AWT d'accéder à des widgets natifs via Java.

227
skiphoppy

La différence fondamentale 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 de vous expliquer. En gros, 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, c'est pourquoi il ressentir les changements d’OS à OS. Où, comme dans les composants Swing, c’est la responsabilité de JVM pour générer la vue des composants. Une autre déclaration que j’ai vue est que swing est basé sur MVC et awt ne l’est pas.

34
Access Denied

Swing vs AWT . Fondamentalement, AWT est arrivé en premier et consiste en un ensemble de composants d'interface utilisateur très puissants (ce qui signifie qu'ils sont des wrappers pour les objets du système d'exploitation), tandis que Swing a été construit sur AWT avec un ensemble plus riche de composants légers.

Tout travail sérieux Java UI est effectué dans Swing, pas AWT, qui était principalement utilisé pour les applets.

14
cletus

Aussi loin que quand AWT peut être plus utile que Swing -

  • vous ciblez peut-être une ancienne machine virtuelle ou une plateforme qui ne prend pas en charge Swing. Auparavant, cela entrait vraiment en jeu si vous construisiez des applets - vous vouliez cibler le plus petit dénominateur commun afin que les utilisateurs ne soient pas obligés d'installer un plugin Java plus récent. Je ne sais pas quelle est la version 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 aux skins "pas tout à fait là" de Swing. (Il existe de meilleurs skins d'origine native que les implémentations de Swing BTW) Beaucoup de personnes ont préféré utiliser FileDialog d'AWT à FileChooser de Swing, car il offrait le dialogue de fichier de plateforme auquel la plupart des gens étaient habitués, plutôt que celui personnalisé "bizarre".
11
Nate

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

AWT est une mince couche de code au-dessus du système d'exploitation, alors que Swing est beaucoup plus volumineux. 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 intègre. Pour un travail exigeant une interface graphique, AWT semble très primitif, comparé à Swing. Dans la mesure où Swing implémente la fonctionnalité d'interface graphique elle-même plutôt que de compter sur le système d'exploitation hôte, il peut offrir un environnement plus riche sur toutes les plateformes sur lesquelles Java est exécuté. AWT est plus limité dans la fourniture de la même fonctionnalité 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'objet OS natif pour implémenter leurs fonctionnalités. JDialog et JFrame ont un poids lourd, car ils ont un pair. Ainsi, des composants tels que JButton, JTextArea, etc., sont légers, car ils ne disposent pas d'un homologue de système d'exploitation.

Un peer est un widget fourni par le système d'exploitation, tel qu'un objet bouton ou un objet de champ de saisie.

9

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 de balançoire sont des composants légers, car la balançoire repose sur le dessus du plateau.

AWT:

  1. AWT est appelé l'outil de fenêtre abstraite.
  2. Les composants AWT dépendent de la plate-forme.
  3. Les composants AWT sont des composants lourds.
7
deepika
  • composant swing fournit une interface utilisateur beaucoup plus flexible car il suit le contrôleur de vue modèle (MVC).
  • awt n'est pas basé sur MVC.
  • swing fonctionne plus vite.
  • awt ne fonctionne pas plus vite.
  • les composants de balançoire sont légers.
  • les composants awt sont lourds.
  • le 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 package javax.swing.
  • awt nécessite le paquet javax.awt.
5
arsh

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

balançoires 1. 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

3
B.DastagiriReddy