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

Interfaces Graphiques en Java Discussion :

Actualiser l'affichage de boutons


Sujet :

Interfaces Graphiques en Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 26
    Points
    26
    Par défaut Actualiser l'affichage de boutons
    Bonjour,
    J'utilise un code Look&Feel qui permet de changer de thèmes dans la JFrame,
    j'aimerais appliquer ce changement sur les images des JButton, je ne sais pas comment faire...

    Le code d'actualisation du thème tient dans ceci:
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
        public void updateLookAndFeel() {
            try {
                UIManager.setLookAndFeel(currentLookAndFeel);
                this.update();
                this.updateUI();
            } catch (Exception ex) {
                System.out.println("Failed loading L&F: " + currentLookAndFeel);
                System.out.println(ex);
     
            }
        }
     
        private void update() {
     
            JFrame frame = getFrame();
            if (frame == null) {
                SwingUtilities.updateComponentTreeUI(this);
            } else {
                SwingUtilities.updateComponentTreeUI(frame);
            }
        }
     
        public JFrame getFrame() { 
            return frame;
        }
     
     
        public void itemStateChanged(ItemEvent e) {
            if (e.getSource() == Jmetal) {
                setLookAndFeel(metal);
            } else if (e.getSource() == Jwindows) {
                setLookAndFeel(windows);
            } else if (e.getSource() == Jaqua && Jmetal.isSelected()) {
                MetalLookAndFeel.setCurrentTheme(new AquaTheme());
                this.updateLookAndFeel();
            } else if (e.getSource() == Jcontrast && Jmetal.isSelected()) {
                MetalLookAndFeel.setCurrentTheme(new ContrastTheme());
                this.updateLookAndFeel();
            } else if (e.getSource() == Jemrald && Jmetal.isSelected()) {
                MetalLookAndFeel.setCurrentTheme(new EmeraldTheme());
                this.updateLookAndFeel();
            } else if (e.getSource() == Jocean && Jmetal.isSelected()) {
                MetalLookAndFeel.setCurrentTheme(new OceanTheme());
                this.updateLookAndFeel();
            } else if (e.getSource() == Jruby && Jmetal.isSelected()) {
                MetalLookAndFeel.setCurrentTheme(new RubyTheme());
                this.updateLookAndFeel();
            } else if (e.getSource() == Jsteel && Jmetal.isSelected()) {
                MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme());
                this.boutonsLook="3";
                this.updateLookAndFeel();
            } else if (e.getSource() == Jcharcoal && Jmetal.isSelected()) {
                MetalLookAndFeel.setCurrentTheme(new CharcoalTheme());
                this.boutonsLook="2";
                this.updateLookAndFeel();
            } 
        }
    Je change de jeu de boutons avec la ligne par exemple,
    mais pour le moment ça ne modifie que le look et pas les boutons...Comment faire ???

  2. #2
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Essais d'appeler la methode updateUI() de chaque bouton que tu as, un peu lourd mais c'est tout ce qui me viens a l'esprit, moi j'utilise la méthode
    SwingUtilities.updateComponentTreeUI(monFrame) sur mon frame, et tous les elements s'update...
    Bonne chance

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 26
    Points
    26
    Par défaut erreur
    Benh la methode SwingUtilities.updateComponentTreeUI(monFrame) je l'utilise déjà dans update(), et updateUI pour chaque bouton ne marche pas !!!

    Help !! please !!

  4. #4
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Tu as quoi dans ta variable currentLookAndFeel ? Tu la modifies quelque part? Parce que si elle a toujours la même valeur, sur que ton look and feel changera pas !

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Points : 26
    Points
    26
    Par défaut re
    En fait j'ai utilisé une source Look&Feel, le changement de thème fonctionne, par dessus j'ai décidé que le changement de thème modifierait aussi les images des boutons, j'appelle un bouton comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    JButton haut = new JButton(new ImageIcon("./images/boutons/"+boutonsLook+"_haut.gif"));
    avec boutonsLook un String = "1" ou "2" etc

    Comme je débute un peu dans Java, je me suis dit que j'avais juste a changer la valeur de boutonsLook au moment du changement de thème, puis de réactualiser le tout, apparemment tel que je l'ai fait ça ne marche pas...

    Dans le code que j'ai posté plus haut, je change donc la valeur dans public void itemStateChanged(ItemEvent e), juste avant l'appel de [FONT=monospace][/FONT]this.updateLookAndFeel();

    Je me demande aussi s'il ne faut pas écrire dans chaque thème quel boutons lui associer, en tout cas je ne sais pas trop comment...Le code du thème Contrast est ecrit ce dessous, comment puis-je ecrire dedans quels boutons à associer au thème ?


    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    package lookandfeel;
     
    import javax.swing.plaf.*;
    import javax.swing.plaf.basic.*;
    import javax.swing.plaf.metal.*;
    import javax.swing.*;
    import javax.swing.border.*;
     
     
    public class ContrastTheme extends DefaultMetalTheme {
     
        public String getName() { return "Contrast"; }
     
        private final ColorUIResource primary1 = new ColorUIResource(0, 0, 0);
        private final ColorUIResource primary2 = new ColorUIResource(204, 204, 204);
        private final ColorUIResource primary3 = new ColorUIResource(255, 255, 255);
        private final ColorUIResource primaryHighlight = new ColorUIResource(102,102,102);
     
        private final ColorUIResource secondary2 = new ColorUIResource(204, 204, 204);
        private final ColorUIResource secondary3 = new ColorUIResource(255, 255, 255);
        private final ColorUIResource controlHighlight = new ColorUIResource(102,102,102);
     
        protected ColorUIResource getPrimary1() { return primary1; } 
        protected ColorUIResource getPrimary2() { return primary2; }
        protected ColorUIResource getPrimary3() { return primary3; }
        public ColorUIResource getPrimaryControlHighlight() { return primaryHighlight;}
     
        protected ColorUIResource getSecondary2() { return secondary2; }
        protected ColorUIResource getSecondary3() { return secondary3; }
        public ColorUIResource getControlHighlight() { return super.getSecondary3(); }
     
        public ColorUIResource getFocusColor() { return getBlack(); }
     
        public ColorUIResource getTextHighlightColor() { return getBlack(); }
        public ColorUIResource getHighlightedTextColor() { return getWhite(); }
     
        public ColorUIResource getMenuSelectedBackground() { return getBlack(); }
        public ColorUIResource getMenuSelectedForeground() { return getWhite(); }
        public ColorUIResource getAcceleratorForeground() { return getBlack(); }
        public ColorUIResource getAcceleratorSelectedForeground() { return getWhite(); }
     
     
        public void addCustomEntriesToTable(UIDefaults table) {
     
            Border blackLineBorder = new BorderUIResource(new LineBorder( getBlack() ));
     
        Object textBorder = new BorderUIResource( new CompoundBorder(
                                   blackLineBorder,
                                       new BasicBorders.MarginBorder()));
     
            table.put( "ToolTip.border", blackLineBorder);
            table.put( "TitledBorder.border", blackLineBorder);
     
            table.put( "TextField.border", textBorder);
            table.put( "PasswordField.border", textBorder);
            table.put( "TextArea.border", textBorder);
            table.put( "TextPane.border", textBorder);
            table.put( "EditorPane.border", textBorder);
     
     
        }
     
    }

Discussions similaires

  1. Actualiser l'affichage d'une applet
    Par carlosml dans le forum Applets
    Réponses: 1
    Dernier message: 21/08/2006, 09h35
  2. Actualiser l'affichage jtable
    Par Blast dans le forum Composants
    Réponses: 6
    Dernier message: 21/04/2006, 17h45
  3. Réponses: 7
    Dernier message: 24/01/2006, 15h34
  4. Affichage des boutons d'un TDBNavigator
    Par AlexB59 dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/12/2005, 22h28
  5. affichage automatique bouton et zone de liste
    Par mathilde50 dans le forum IHM
    Réponses: 4
    Dernier message: 16/11/2004, 16h02

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