IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

Impossible de modifier le lookandfeel depuis la classe elle-même


Sujet :

Java

  1. #1
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2009
    Messages : 167
    Points : 118
    Points
    118
    Par défaut Impossible de modifier le lookandfeel depuis la classe elle-même
    J'utilise un JScrollPane et je souhaite modifier l'aspect des scrolls. Pour cela je crée une classe, et je fais :

    m_scrollPane.getVerticalScrollBar().setUI( new X7ScrollBarUI());

    Et cela fonctionne très bien.

    Après quoi je me dis que je fais ma classe de scrollpane :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import java.awt.Component;
    import javax.swing.JScrollPane;
     
    public class X7ScrollPane extends JScrollPane {
    	private static final long serialVersionUID = 1L;
     
    	public X7ScrollPane( Component component){
    		super( component);
    		getVerticalScrollBar().setUI( new X7ScrollBarUI());
    		getHorizontalScrollBar().setUI( new X7ScrollBarUI());
    	}
    }
    et curieusement le lookandfeel n'est pas appliqué !?

    Autrement dit, depuis l'extérieur de la classe, il s'applique, mais pas depuis l'intérieur de la classe.

    Je ne comprends pas pourquoi cela ne fonctionne pas. Avez-vous une idée ?

    Christian

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Sans doute un problème de thread... essaie de wrapper les appels dans SwingUtilities.invokeAndWait/invokeLater
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  3. #3
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2009
    Messages : 167
    Points : 118
    Points
    118
    Par défaut
    Merci de ta réponse rapide.

    J'ai essayé les 2 options, mais cela ne change rien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    import java.awt.Component;
    import java.lang.reflect.InvocationTargetException;
     
    import javax.swing.JScrollPane;
    import javax.swing.SwingUtilities;
     
    public class X7ScrollPane extends JScrollPane {
    	private static final long serialVersionUID = 1L;
     
    	public X7ScrollPane( Component component){
    		super( component);
     
    		try {
    			SwingUtilities.invokeAndWait(new Runnable() {
    				public void run() {
    					getVerticalScrollBar().setUI( new X7ScrollBarUI());
    					getHorizontalScrollBar().setUI( new X7ScrollBarUI());
    				}
    			});
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (InvocationTargetException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    	}
    }

  4. #4
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Ok, sinon il y a l'option suivante pour setter l'UI par défaut de toutes les scrollbar:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UIManager.put("ScrollBarUI", MyScrollbarUI.class.getName());
    dans le main de l'application. ça évite de faire des sous-classes, mais c'est un peu moins souple (toute les scrollbar sont identiques)
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  5. #5
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    hum, je viens de retrouver ça dans mes cartons....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SwingUtilities.updateComponentTreeUI(this);
    qui devrait probablement mieux fonctionner (pas testé)
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  6. #6
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2009
    Messages : 167
    Points : 118
    Points
    118
    Par défaut
    Super !

    Tu m'as retiré une belle épine du pieds.

    Un grand merci.

    Christian

Discussions similaires

  1. Composition à la classe elle-même
    Par kadilldév dans le forum Autres Diagrammes
    Réponses: 1
    Dernier message: 09/03/2014, 18h14
  2. [Débutant] Modifier une TextBox depuis une class [erreur CS0038]
    Par Allan007 dans le forum C#
    Réponses: 4
    Dernier message: 27/05/2012, 10h23
  3. [Data] Joindre une classe à elle-même
    Par dark_geek dans le forum Spring
    Réponses: 1
    Dernier message: 20/04/2010, 14h14
  4. Comment modifier un contrôle depuis une classe ?
    Par pot2yaourt dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/07/2009, 15h01
  5. impossible de modifier un fichier excel depuis sharepoint
    Par csa09966 dans le forum SharePoint
    Réponses: 4
    Dernier message: 18/06/2008, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo