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 :

gestion de l'affichage des composants


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut gestion de l'affichage des composants
    Bonjour,

    dans un panel, suivant son état, je dois afficher un JLabel, un JTextArea, ou rien du tout...

    Par exemple, pour afficher le JLabel, j'ai créé la méthode suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void activeLabel() {
            this.removeAll();
     
            this.setVisible(false);
            this.add( myImage, BorderLayout.CENTER );
            this.setVisible(true);
    }
    Mais walla, cela ne s'affiche pas alors qu'il passe bien dans la méthode... Pourquoi ???

    Merci pour votre aide.
    Fabien

  2. #2
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    ta fonction est dans un panel ou dans une Frame
    si c'est dans une frame tu dois faire this.getcontentPane().add(...)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut
    Bonjour,

    ma fonction se trouve dans une sous-classe qui hérite d'un JPanel...
    C'est un logiciel assez grand, et il y a pas mal de JPanel imbriqué...

    Le problème ne vient pas de là, car si j'écrit :

    «
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.add ( myImage, BorderLayout.CENTER );
    » à l'instanciation de la classe, mon JLabel s'affiche bien...


    Fabien

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    Pour changer le contenu d'un JPanel tu peux le vider puis ajouter ce que tu veux dedans et faire un validate ou un repaint a la fin.

    Les setVisible ne sont pas necessaire.

  5. #5
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    dans l'esprit de ce que t'a proposé barbu0055, je te suggère d'utiliser revalidate() à la place de validate(), ceci sur le JPanel.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    Comme un exemple vaut souvent mieux qu'une longue explication en voila un tres simple executable et qui marche par dessus le marché

    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
    65
    66
    67
    68
    69
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
    public class Test extends JFrame implements ActionListener {
    	private JPanel topPanel;
    	private JPanel centerPanel;
     
    	JLabel label;
    	JTextArea jta;
    	JButton jb;
     
    	private int state = 0;
     
    	public Test() {
    		super("Test");
    		this.getContentPane().setLayout(new BorderLayout());
    		topPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
    		centerPanel = new JPanel(new BorderLayout());
     
    		label = new JLabel("Label");
    		jta = new JTextArea();
    		jb = new JButton("Change Panel");
     
    		jb.addActionListener(this);
     
    		topPanel.add(jb);
    		centerPanel.add(label,BorderLayout.CENTER);
    		this.getContentPane().add(topPanel,BorderLayout.NORTH);
    		this.getContentPane().add(centerPanel,BorderLayout.CENTER);
     
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setSize(400,400);
    		this.setLocation(500,500);
    		this.setVisible(true);
    	}
     
    	public void actionPerformed(ActionEvent e) {
    		System.out.println(state);
     
    		switch (state) {
    		case 0:
    			System.out.println("Affichage d'une zone de texte");
    			centerPanel.removeAll();
    			centerPanel.add(jta,BorderLayout.CENTER);
    			centerPanel.repaint();
    			centerPanel.revalidate();
    			break;
    		case 1:
    			System.out.println("Affiche rien");
    			centerPanel.removeAll();
    			centerPanel.repaint();
    			centerPanel.revalidate();
    			break;
    		case 2:
    			System.out.println("Affiche label");
    			centerPanel.removeAll();
    			centerPanel.add(label,BorderLayout.CENTER);
    			centerPanel.repaint();
    			centerPanel.revalidate();
    			break;
    		}
    		state = (++state)%3;
    	}
     
    	public static void main (String args[]) {
    		Test t = new Test();
    	}
    }

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut
    j'ai essayé :

    this.removeAll();
    this.add( myImage, BorderLayout.CENTER );
    this.validate();
    this.repaint();

    mais cela ne marche toujours...
    J'ai donc remplacé validate par revalidate() idem
    J'ai également interverti validate et repaint...

    Sans succès...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    Essai de mettre un validate sur le container du panel.
    Mais ton cas est etrange, je ne vois pas pqoi ca ne marche pas.
    - Es tu sur de faire les operations sur le bon jpanel ? (est ce qu il n a pas été réinstancié entre temps ?)
    - Quel est le comportement que tu obtiens exactement ?
    - Est ce que le comportement de mon exemple est le comportement souhaité ?
    - As tu regardé du côté des CardLayout qui permettent de passer d'un panel à un autre ?

  9. #9
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Le problème ne viendrait pas de ton composant myImage plutôt ?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut
    re,

    walla, j'ai trouvé...
    cela venait que je passais deux fois par la méthode init().
    Merci à tous pour votre aide.



    Bonne journée.
    Fabien

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

Discussions similaires

  1. Gestion de l'affichage des bouton
    Par funkyjul dans le forum VBA Access
    Réponses: 2
    Dernier message: 02/12/2008, 11h09
  2. problème d'affichage des composants
    Par charpe_a dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 15/09/2008, 16h05
  3. Disposition et affichage des composants?
    Par dj_techno dans le forum Delphi
    Réponses: 4
    Dernier message: 31/05/2007, 08h47
  4. [Kylix] Affichage des composants
    Par Tux74 dans le forum EDI
    Réponses: 5
    Dernier message: 20/02/2006, 10h13
  5. [Swing][ListCellRenderer]Pas d'affichage des composants
    Par Cyberwan dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 08/02/2006, 00h22

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