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

AWT/Swing Java Discussion :

afficher un composant dans JPanel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 58
    Par défaut afficher un composant dans JPanel
    Bonjour,
    dans un programme, j'ai fait un panel de controle (avec des JComboBox) hérité d'un JPanel
    voila le code :
    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
     public class Com extends JPanel implements ActionListener {
    private JComboBox combo1, combo2 ;
    public Com () {
            this.setSize(300, 400);
            this.setBackground(Color.white);
            this.combo1= new JComboBox(tablo1);
            this.combo1.setBounds(10, 10, 100, 20);
            this.add(this.combo1);
     
            this.combo2 = new JComboBox (tablo2);
            this.combo2 .setBounds(150, 10, 100, 20);
            this.add(this.combo2 );
     
        }
     
        public void paint (Graphics g) {
            super.paintComponent(g);
     
        }
    }
    J'ai utilisé la méthode paint() avec super.paintComponent(g) pour avoir un joli fond blanc. C'est réussi mais mes combo ne deviennent visibles que lorsque je passe le curseur de la souris dessus

    Quelqu'un a une idée?

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Inutile de dériver un JPanel pour avoir un fond blanc. "setBackground( java.awt.Color )" suffit.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Par défaut
    Citation Envoyé par Solly Voir le message
    J'ai utilisé la méthode paint() avec super.paintComponent(g) pour avoir un joli fond blanc.
    Ne jamais redéfinir la méthode paint() (sauf cas exceptionnel) sous peine de s'exposer à de graves problèmes. D'ailleurs paint() appelle déja paintComponent(), sauf qu'elle ne fait pas que ça et ce qu'elle fait est important !

    Fred

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 58
    Par défaut
    j'aurais peut être du préciser que je voulais après changer la couleur de fond en fonction des choix des combos (et en plus, j'aimerais mettre un dégradé)...

    En gros :
    Je veux un panneau avec mes deux boites combo, et la couleur de fond sera le dégradé des couleurs choisie par les combos, donc la couleur de fond change à chaque actions...

    Qu'est ce que je dois refaire? paint()?, paintComponent()?, paintComponents()?, une autre?
    Là, je suis perdue....

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Par défaut
    Citation Envoyé par Solly Voir le message
    Qu'est ce que je dois refaire? paint()?, paintComponent()?, paintComponents()?, une autre?
    Sans le dégradé, un appel à setBackground() aurait suffit, il n'y aurait pas eu besoin de redéfinir de méthode du JPanel.

    Avec le dégradé, je ne connais pas d'autre moyen que de faire le dessin explicitement en surchargeant paintComponent(). Si quelqu'un connais une meilleure solution, ça m'intéresse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    protected void paintComponent(Graphics g)
    {
      Graphics2D g2 = (Graphics2D) g;
      g2.setPaint(new GradientPaint(x, y, color1, width, height, color2));
      g2.fillRect(x, y, width, height);
      super.paintComponent(g);
    }
    Dans mon cas, j'ai du rendre mon composant non opaque (setOpaque(false)), je ne sais plus si c'est absolument nécessaire ou si c'était pour une autre raison...

    Fred

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 58
    Par défaut
    je viens d'essayer :
    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
     
    public void paint(Graphics g) {        
            super.paintComponents(g);
            Graphics2D g2 = (Graphics2D)g; 
            GradientPaint gradient = new GradientPaint(0, 
                                          0, 
                                          this.actualColor,           
                                          this.getWidth(),                                                                              this.getHeight(),
                                          Color.white,    
                                                                          true);
     
     
            g2.setPaint(gradient);
            g2.fillRect(0, 0, this.getWidth(), this.getHeight());
            this.combo1.repaint();
            this.combo2.repaint();
            }
    et ça fonctionne!

    merci pour votre aide!

  7. #7
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Merci d'utiliser les balises [ CODE ] (#)

    Par contre là tu override toujours public void paint(Graphics g), override paintComponents plutôt.

Discussions similaires

  1. Afficher une image dans jpanel
    Par lostsoul dans le forum Général Java
    Réponses: 6
    Dernier message: 12/05/2009, 04h07
  2. positionnement composent dans JPANEL
    Par cell dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 20/05/2008, 09h44
  3. afficher plusieurs composants dans une seule page
    Par groupe dans le forum GWT et Vaadin
    Réponses: 6
    Dernier message: 07/05/2008, 11h44
  4. afficher un composant dans un JScrollpane
    Par christianf dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 26/08/2007, 16h43
  5. Pb pour afficher des composants dans la palette
    Par Captain_JS dans le forum C++Builder
    Réponses: 1
    Dernier message: 12/07/2005, 18h35

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