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 :

Les couches : JPanel / JRoot / JLayredPane / JContentPane / JMenuBar / GlassPane


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 497
    Par défaut Les couches : JPanel / JRoot / JLayredPane / JContentPane / JMenuBar / GlassPane
    salut !

    J'ai pu constaté toute la compléxité de la class SWING, avec ces multiples couches a ne rien ni comprendre !
    Bref, Le programmeur de ce que j ai pu saisir ne doit bosser que sur deux couches,

    - la ContentPane,
    et
    - la couche JApplet.

    Alors un truc tout stupide, tellement stupide qu'il donne des envies de meurtres

    Je veux colorier la couche ContentPane en Vert & la couche JApplet en jaune alors je fais tout betement, comme les tuto l indique :

    import javax.swing.*;
    import java.awt.color;

    public class exo extends JApplet
    {
    public void init()
    {
    this.setBackground(Color.yellow); // couche JPanel
    getContentPane().setBackground(Color.green); // couche ContentPane
    }
    }
    alors la qu'on m'explique pkoi la couche JPanel n est pas teintée !!!!
    et aussi, a quel objet fait référence this, qui est supposé etre l'instance de classe en cours d'utilisation ...


    merci de m expliquer !

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    J'ai pu constaté toute la compléxité de la class SWING
    *mdr* tu n'as rien vu encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class test extends JApplet{
     
        public test(){
            init();
        }
     
        public void init() {
            this.setBackground(Color.yellow); // couche JPanel
            getContentPane().setBackground(Color.green); // couche ContentPane
        }
     
    }
    c'est normal que tu ne vois pas de jaune car quant tu fais :
    this.setBackground(Color.yellow);
    getContentPane().setBackground(Color.green);


    le ContentPane prend toute la place et recouvre integralement l'applet.


    et aussi, a quel objet fait référence this, qui est supposé etre l'instance de classe en cours d'utilisation ...
    c'est le cas, le this fait reference au japplet.

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 497
    Par défaut
    ouais, mais quand je commente le "getContent ... " et bun je vois pas de jaune !
    j'débute en java, mais bon lol, je suis pas null a ce point lol

    le ContentPane prend toute la place et recouvre integralement l'applet.
    amicalement.

  4. #4
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    le contentPane (de classe Container) est Opaque par defaut, et a une couleur grise.

    demonstration pour voir le jaune de l'applet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void init() {
            this.setBackground(Color.yellow); 
     
            JPanel monpanneau = new JPanel();
            monpanneau.setBackground(Color.green);
            monpanneau.setOpaque(false); //rend le panneau transparant
            // du coup tu verras la couleur jaune de l'applet
     
            setContentPane(monpanneau);
        }

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 497
    Par défaut
    en effet, fallait le savoir ca !

    il est opaque et a une couleur grise par defaut !

    merci, une petite derniere question !

    setContentPane(monpanneau);
    sous entends que tu integres le Jpanel nomé monpanneau sur la couche : ContentPane !

    n'est ce pas ?

    mais alors, que produit :

    getContentPane().add(monpanneau) ?
    visuellement je n obtient pas le meme resultat !

    merci.

  6. #6
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    le ContentPane est le contenant de l'applet. c'est celui qui va contenir les composants visuels (JButton, JLabel ...etc...)

    Il est tres primitif par defaut (c'est un Container, peu de methode)

    donc soit tu le remplace (avec setcontentPane)
    soit tu lui ajoutes des composants (getContentPane().add(...));

    personnellement je le remplace toujours.



    sous entends que tu integres le Jpanel nomé monpanneau sur la couche : ContentPane !
    ne parle pas de couche, parle plutot d'objet ou de contenant.

  7. #7
    Membre éprouvé
    Inscrit en
    Juillet 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 79
    Par défaut
    pas tout a fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setContentPane(monpanneau);
    remplace le contentPane de ton Applet par le panel

    tandis que ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getContentPane().add(monpanneau)
    ca ajoute le panel dans le contentPane
    Ton contentPane est donc toujours la et quand tu fais monPanneau.setOpaque(false) c'est donc le BackGround du contentPane que tu vas voir dans ce cas la, donc il est normal qu'il ne se passe pas la meme chose parce que ca ne fait pas la meme chose.

    EDIT : zut à 1min pret

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/02/2008, 17h05
  2. Réponses: 10
    Dernier message: 01/09/2007, 16h12
  3. [reseau de neurones]cb de neurones sur les couches ?
    Par oniric dans le forum Méthodes prédictives
    Réponses: 3
    Dernier message: 27/05/2007, 10h08
  4. Bibliothèque implémentant les couches basses tcp/ip-html
    Par cheprod dans le forum Bibliothèques
    Réponses: 7
    Dernier message: 16/03/2007, 18h05
  5. echange entre les couches
    Par manoushka dans le forum Hardware
    Réponses: 2
    Dernier message: 31/05/2006, 08h45

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