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

Composants Java Discussion :

Le fond de mon nouveau UI reste blanc !


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    920
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 920
    Par défaut Le fond de mon nouveau UI reste blanc !
    Bonjour,
    Je viens d'écrire une extension du BasicComboBoxUI pour avoir une drop-down hyper basic: un Jlabel comme renderer et une simple petite flèche en guise bouton pour le popup.
    Mon problème est que je n'arrive pas à faire prendre des couleurs à mon renderer: il reste obstinément blanc.

    Voici le code du UI:

    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
    public class FlatComboUI extends BasicComboBoxUI {
     
        public FlatComboUI(JComponent component) {
            super();
        }
     
        @Override
        public void installUI(JComponent c) {
            super.installUI(c);
            comboBox.setBorder(null);
     
        }
     
        @Override
        protected ListCellRenderer createRenderer() {
            return new FlatComboRenderer((clFlatComboBox)comboBox);
        }
     
        public static ComponentUI createUI(JComponent c) {
            return new FlatComboUI(c);
        }
     
        @Override
        protected JButton createArrowButton() {
            return new FlatComboArrowButton((clFlatComboBox) comboBox);
        }
     
        /**
         *  Un render sous forme de Jlabel
         */
        private class FlatComboRenderer implements ListCellRenderer {
     
            private JLabel editor ;
            private clFlatComboBox comboBox;
            private Color selectedBackground;
     
            public FlatComboRenderer(clFlatComboBox comboBox) {
                this.comboBox = comboBox;
                editor= new JLabel();
                editor.setBorder(null);
                selectedBackground = (Color) UIManager.getDefaults().get("ComboBox.selectionBackground");
            }
     
            public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
                editor.setText(value.toString());
                if (cellHasFocus) editor.setBackground(selectedBackground); else editor.setBackground(Color.cyan); //comboBox.getBackground());
                return editor;
            }
        }
     
        private class FlatComboArrowButton extends JButton {
        ...
    Dans le code j'essaye de le forcer à cyan pour voir ce que ça donner, mais ça ne donne rien. Idéalement, j'aimerais avoir la couleur qui a été spécifiée pour le JComboBox. Etrangement, et sans que je ne fasse rien, la partie bouton à la bonne couleur.

    Merci pour vos suggestions.

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Les JLabel ne sont pas opaque par défaut. C'est à dire qu'ils ne déssinent pas leurs background

    Ceci devrait corriger le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    editor= new JLabel();
    editor.setOpaque(true);
    a++

  3. #3
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    920
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 920
    Par défaut
    Ahhh !!! Merci pour ta suggestion. Ca m'a bien été utile. Ca marche et en même temps ça ne me plaît pas trop. Je m'explique. Le BasicComboUI met du blanc, moi je remets du gris par-dessus... Ca ressemble un peu à un emplâtre sur une jambe de bois. Autant faire en sorte que mon UI ne mette pas de blanc dès le départ. C'est plus propre.
    J'y suis arrivé, mais quelle sac de noeuds ce système de UI !!!! Je commence à en voir les avantages. Mais avec ces 25000 méthodes paintXXXX, avant de trouver la quelle réecrire....

    Maintenant où ça coince c'est cette partie ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class FlatComboUI extends BasicComboBoxUI {
     
        public FlatComboUI(JComponent component) {
            super();
        }
     
        @Override
        public void installUI(JComponent c) {
            super.installUI(c);
            comboBox.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 1), BorderFactory.createEmptyBorder(2, 0, 2, 0)));
        }
    Le setBorder: si j'augmente la taille de mon EmptyBorder, au lieu que cela augmente la taille de mon combo, cela diminue la taille du JLabel qui me sert de renderer. Comme si au lieu de s'étendre vers l'extérieur, la bordure s'étendait vers l'intérieur....

    Est-ce tu (ou quelqu'un d'autre) vois pourquoi ?

    Merci.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Le bordure se dessinent toujours dans les composants, ce sont les layout manager qui disposent et dimensionnent ces composant. Les layout managers utilisent (parfois) getPreferredSize(), getMinimumSize() et getMaximumSize() du composant pour déterminer sa taille préférencielle.

  5. #5
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    920
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 920
    Par défaut
    Je crois que j'étais dans un contexte où la hauteur était limitée et où donc plus je mettais un gros bord plus cela se répercutait vers l'intérieur du composant (le gui builder d'Eclipse). J'ai tout simplifié et plus de problème de bord et j'ai tout mis en opaque à false: le combobox, le renderer: tout est bien transparent maintenant et tout joli.
    Merci à vous deux.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD-2010] Tableau < Trame de fond < Reste blanc derrière le texte
    Par aliceinwoo dans le forum Word
    Réponses: 8
    Dernier message: 14/09/2025, 08h19
  2. design de mon nouveau site
    Par lucalb dans le forum Mon site
    Réponses: 9
    Dernier message: 20/02/2007, 16h17
  3. Réponses: 8
    Dernier message: 19/09/2006, 08h40

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