FAQ Java GUIConsultez toutes les FAQ
Nombre d'auteurs : 37, nombre de questions : 155, dernière mise à jour : 10 octobre 2015 Ajouter une question
Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de http://www.developpez.com et de l'expérience personnelle des auteurs.
Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.
- Comment combiner des composants AWT et Swing ?
- Comment ouvrir la fenêtre d'édition de courriel par défaut ?
- Comment ouvrir l'explorateur par défaut pour visualiser une page Web ?
- Comment ouvrir un fichier avec le programme par défaut ?
- Comment imprimer un fichier avec le programme par défaut ?
- Comment mettre mon application dans le "systray" ?
Les composant AWT sont dits heavyweight ou composants lourds tandis que les composants Swing sont dits lightweight ou composants légers.
Précédemment, lorsqu'on mélangeait de tels composants, le composant heavyweight s'affichait toujours par dessus les autres composants lightweight. Il était possible d'appeler les méthodes setDefaultLightWeightPopupEnabled() et setLightWeightPopupEnabled() des classes JPopupMenu et JComboBox pour pallier certains défauts de superposition, mais cela ne réglait pas tous les problèmes. Depuis Java 6 update 12 et le JDK 7 build 19 (préversion du JDK 7), il est possible de mélanger des composants Swing avec des composants AWT sans avoir les composants AWT qui s'affichent tout le temps au-dessus des composant Swing.
Les restrictions suivantes s'appliquent cependant :
1. Suite à un bug dans Swing ( 6852592 ), il faut absolument revalider la hiérarchie des composants dès que celle-ci devient invalide. Il ne faut pas simplement appeler revalidate() sur le composant, mais également appeler validate() sur un conteneur parent (la JFrame par exemple).
Code java : | Sélectionner tout |
1 2 | monComposant.revalidate(); maFrame.validate(); |
2. Lorsqu'un composant heavyweight doit être ajouté dans un JScrollPane, il faut mettre son scroll mode à la valeur SIMPLE_SCROLL_MODE. Les autres modes de scroll ne sont pas supportés, car ils sont optimisés uniquement pour des composants ligthweight.
Code java : | Sélectionner tout |
monScrollPane.setScrollMode(JScrollPane. SIMPLE_SCROLL_MODE) ;
Cette méthode ne faisant pas partie de l'API publique, elle peut changer ou être retirée dans les futures versions de Java. Il est également possible qu'elle soit déplacée dans une autre classe dans la version finale du JDK 7. Sun recommande d'utiliser la réflexion pour l'invoquer, mais vous pouvez également utiliser l'API AWTUtilities d'adiGuba.
Il existe également des limitations :
- La superposition de composants lightweight semi-transparents par-dessus un composant heavyweight n'est pas supportée : la partie du composant heavyweight située sous le composant lightweight ne s'affichera pas.
- Les composants heavyweight doivent appartenir au même processus que celui qui a créé la frame ou l'applet contenant les composants lightweight.
- La gestion avancée des événements Swing telle que ceux se basant sur InputMap peut ne pas fonctionner correctement en cas de mélange de composants lightweight et heavyweight.
- Si vos applications mélangent déjà des composants AWT et Swing et qu'elles ne se comportent plus correctement une fois passées à des versions plus récentes de Java, il est possible de désactiver cette fonctionnalité en mettant la propriété système sun.awt.disableMixing à la valeur “false”.
Depuis Java 6, il y a une solution toute simple pour ouvrir la fenêtre d'édition de courrier du programme par défaut. Il vous faut employer la classe java.awt.Desktop pour cela.
Pour ouvrir simplement la fenêtre pour un nouveau mail :
Code java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | if (Desktop.isDesktopSupported()) { if (Desktop.getDesktop().isSupported(java.awt.Desktop.Action.MAIL)) { try { java.awt.Desktop.getDesktop().mail(); } catch (IOException ex) { //Traitement de l'exception } } else { //La fonction de mail n'est pas supportée par votre système d'exploitation } } else { //Desktop pas supportée par votre système d'exploitation } |
Vous pouvez aussi spécifier une adresse de destination :
Code java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | if (Desktop.isDesktopSupported()) { if (Desktop.getDesktop().isSupported(java.awt.Desktop.Action.MAIL)) { try { java.awt.Desktop.getDesktop().mail(new java.net.URI("mailto:nom@fai.ext")); } catch (IOException ex) { //Traitement de l'exception } } else { //La fonction de mail n'est pas supportée par votre système d'exploitation } } else { //Desktop pas supporté par votre système d'exploitation } |
Depuis Java 6, il y a une solution toute simple pour ouvrir l'explorateur par défaut à une page quelconque. Il vous faut employer la classe java.awt.Desktop pour cela.
Par exemple, pour ouvrir l'explorateur par défaut sur le site Java de Developpez.com :
Code java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | if(Desktop.isDesktopSupported() { if(Desktop.getDesktop().isSupported(java.awt.Desktop.Action.BROWSE) { try { java.awt.Desktop.getDesktop().browse(new URI("http://java.developpez.com")); } catch (IOException ex) { //Traitement de l'exception } catch (URISyntaxException uri) { //Traitement de l'exception } } else { // La fonction n'est pas supportée par votre système d'exploitation } } else { // Desktop pas supporté par votre système d'exploitation } |
Depuis Java 6, il y a une solution toute simple pour ouvrir un fichier avec le programme par défaut pour ce type de fichier. Il vous faut employer la classe java.awt.Desktop pour cela.
Par exemple, pour ouvrir un fichier (C:\\Test.pdf) avec le programme par défaut pour les PDF :
Code java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | if (Desktop.isDesktopSupported() { if (Desktop.getDesktop().isSupported(java.awt.Desktop.Action.OPEN) { try { java.awt.Desktop.getDesktop().open(new File("C:\\Test.pdf")); } catch (IOException ex) { //Traitement de l'exception } } else { //La fonction n'est pas supportée par votre système d'exploitation } } else { //Desktop pas supporté par votre système d'exploitation } |
Depuis Java 6, il y a une solution toute simple pour imprimer un fichier avec le programme par défaut pour ce type de fichier. Il vous faut employer la classe java.awt.Desktop pour cela.
Par exemple, pour imprimer un fichier (C:\\Test.pdf) avec le programme par défaut pour les PDF :
Code java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | if (Desktop.isDesktopSupported(){ if(Desktop.getDesktop().isSupported(java.awt.Desktop.Action.PRINT){ try { java.awt.Desktop.getDesktop().print(new File("C:\\Test.pdf")); } catch (IOException ex) { //Traitement de l'exception } } else { //La fonction n'est pas supportée par votre système d'exploitation } } else { //Desktop pas supporté par votre système d'exploitation } |
Depuis Java SE 6, il est possible de placer des icônes dans le "system tray" du bureau. Toutefois cette fonctionnalité étant fortement dépendante du système d'exploitation et de son bureau, elle n'est pas forcément supporté dans tous les cas.
Voici un exemple de code permettant d'ajouter une icône dans le "systray" :
Code java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | // On vérifie que le "systray" est supporté // par la JVM pour ce système d'exploitation if (SystemTray.isSupported()) { // On Crée un TrayIcon qui représentera notre icône : TrayIcon trayIcon = new TrayIcon( image, // L'image qui sera utilisé comme icône tooltip, // Le texte affiché lors du survol de la souris popup // Le PopupMenu qui s'affichera lors du clic droit ); // On active le redimensionnement automatique de // l'icône, afin qu'elle s'adapte au système // (sinon l'icône peut être tronqué ou disproportionné) trayIcon.setImageAutoSize(true); // On récupère l'instance du SystemTray SystemTray systemTray = SystemTray.getSystemTray(); // Et on ajoute notre TrayIcon dans le system tray systemTray.add(trayIcon); } |
Code java : | Sélectionner tout |
1 2 3 4 5 | trayIcon.displayMessage( "Titre", // Titre de la bulle "Message", // Contenu du message MessageType.INFO // Style de l'icone ); |
- SysTray for Java : fonctionne sur les systèmes Windows et KDE.
- JDIC (JDesktop Integration Components) : fonctionne sous Windows, Linux et Solaris
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.