2010-09-22 15 views
6

Existe-t-il un moyen spécifique de changer l'apparence d'une application swing sans avoir besoin de redémarrer l'application à chaque fois que le LAF a été modifié par l'utilisateur? Je recherche une solution où l'on peut sélectionner le LAF à partir d'une boîte de dialogue de configuration et il change directement sur appliquer sans avoir à demander à l'utilisateur de redémarrer l'application. Actuellement, je me souviens du fichier LAF sélectionné dans un fichier de propriétés et le réglais au démarrage avant l'ouverture d'une fenêtre.comment changer java swing look et se sentir sans redémarrage de l'application?

+3

Cela ne fonctionne-t-il pas? http://stackoverflow.com/questions/2655929/lookandfeel-not-changing-in-ubuntu/2656085#2656085 –

+0

@tim_yates En fait, parfois ce n'est pas le cas. Les auditeurs en particulier seront virés dans un ordre différent, ce qui ne devrait pas avoir d'importance, mais cela arrive souvent. De même, je ne ferais pas confiance aux désinstallations de PL & F (notamment si UIResource n'est pas utilisé (comme c'est le cas avec certaines classes et primitives), alors comment le PL & F peut-il détecter avec précision si le code de l'application propriété du composant?). –

+0

@Tom Mais cela peut fonctionner si ce n'est pas une application trop complexe, et c'est le seul espoir d'une solution de travail autre que le redémarrage complet, que l'OP veut éviter ... –

Répondre

5

De l'Java tutorial:

Vous devez d'abord définir le nouveau look and feel en appelant UIManager.setLookAndFeel:

UIManager.setLookAndFeel(lnfName); 

Ensuite, afin de rendre Componentes existantes reflètent le nouveau look and feel, appelez le SwingUtilities.updateComponentTreeUI sur chaque conteneur de premier niveau (boîtes de dialogue, trames ..). Vous souhaiterez peut-être également redimensionner chaque conteneur de niveau supérieur pour l'adapter aux modifications de la taille de ses composants contenus:

SwingUtilities.updateComponentTreeUI(frame); // update components 
frame.pack();         // adapt container size if required