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 :

Gerer l'affichage d'un JPanel


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut Gerer l'affichage d'un JPanel
    Bonjour Tout L monde,

    J'ai un petit prob avec un evenment dans une interface :La gestion de l'evnement est simple il s'agit d'afficher un JPanel qui contient des composantes lorsque je clic sur un JLabel.Le probleme c'est que lorsque je clic plusieurs fois sur le JLabel les composantes du JPanel s'affichent plusieurs fois et tout la fentre (JFrame) est remplie par composantes.Pour résoudre ce prob j'ai pensé de mettre une condition(un IF) lors de l'apple du gestionnaire d'evnement :cad si le JPanel n'est pas visible (setVisible(false)) alors a ce moment la il peut afficher le JPanel avec ses composantes.Le probleme c que j'arrive pas à trouver une methode qui me retournera si le JPanel en question est visible ou pas .Donc si vous avez une proposition dans ce sens ou bien une autres alternative pour gerer la duplication de ces composantes j'en serait reconnaissant.

    Merci.

  2. #2
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Citation Envoyé par morph41 Voir le message

    Merci pour le coup de main Le "Component.isVisible()" est effectivement la metode que je cherchais mais malheuresment elle ne resoud pas le prob de duplication des compsantes au sein de mon JPanel car quand je clic par exp 2 fois sur le JLabel j'ai deux fois le nombre de composantes(JcheckBox) que je devrais avoir ,t'aurais pas une astuce pour remedier a ce prob.

    Merci.

  4. #4
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Ne sachant pas comment tu créés ton interface, c'est difficile de savoir comment résoudre le problème.

    Il faudrait que tu donnes ton code. (en utilisant la balise CODE #)

  5. #5
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Par défaut
    Salut,

    A moins que ce ne soit possible, pourquoi ne pas utilisé un Jbutton (tu peux faire en sorte qu'il n'affiche que du texte ce qui graphiquement le rend identique a ton JLabel) et tu utilise la méthode setEnabled(false) lorsqu'un évenement clic est déclenché dessus, de fait l'utilisateur ne peut plus faire de nouvelles actions dessus tant qu'il ne sera pas de nouveau fait setEnabled(true).

    De plus tu utilise un ActionListener plutôt qu'un MouseListener, ce qui ne limite pas l'utilisateur a la souris ! Un plus pour ceux qui ont du mal a se servir d'une souris.

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Comme je l'ai deja citer je veut afficher un JPanel (Jpanel2) qd je clic sur un lebel de plus ce JPanel2 contient des JCheckBox qui sont ajouter dynamiqument au JPanel1 avec une fonction (fuction) que je detaillerais le code en bas mais avant voila le code de listner :


    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
     
     
    label1.addMouseListener(new java.awt.event.MouseAdapter() {
                    public void mouseClicked(java.awt.event.MouseEvent evt) {
                        label1MouseClicked(evt);
                    }
                });}
                private void label1MouseClicked(java.awt.event.MouseEvent evt) {  
     
    if(jPanel2.isVisible()){
     
      	fuction();
     
                  jPanel2.setVisible(true);
                  jPanel2.revalidate(); 
     
     
                        	}
    }}
                           		);}

    Et voila commnet j'ajoute les JCheckBox dans le JPanel1 :

    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
     
     
    NodeList enfants = racine.getChildNodes();
     
               final  ArrayList<JCheckBox> liste = new ArrayList<JCheckBox>();
               for (int i = 0; i <=enfants.getLength(); i++) {
                Node node = enfants.item(i);
                if (node.getNodeType() == Node.ELEMENT_NODE) {
                 final Element elt = (Element) node;
     
                liste.add(new JCheckBox(elt.getAttribute("name")));
     
     
                 test.jPanel2.setLayout(new GridLayout(enfants.getLength(),1));
     
                 //pour chaque JCheckbox de la liste on l'affiche dans le jpnale2
    for (final JCheckBox c : liste) {
     
        test.jPanel2.add(c); }
    Il ya du XML sur cette partie comme tu peut le consatater car les nom associe au JCheckBox sont lu a prtir d'un fichier XML mais bon c pas la ou se situe le prob c juste une question de gerer ces JCheckBox dans le JPanel2 car quand je clic plusieurs fois sur le JLabel il ya un garnd nombre de JCheckBox qui s'affiche .

    Voila j'espére que je bien poser le prob comme ça.

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Citation Envoyé par visiwi Voir le message
    Salut,

    A moins que ce ne soit possible, pourquoi ne pas utilisé un Jbutton (tu peux faire en sorte qu'il n'affiche que du texte ce qui graphiquement le rend identique a ton JLabel) et tu utilise la méthode setEnabled(false) lorsqu'un évenement clic est déclenché dessus, de fait l'utilisateur ne peut plus faire de nouvelles actions dessus tant qu'il ne sera pas de nouveau fait setEnabled(true).

    De plus tu utilise un ActionListener plutôt qu'un MouseListener, ce qui ne limite pas l'utilisateur a la souris ! Un plus pour ceux qui ont du mal a se servir d'une souris.

    Merci pour la remarque mias bon pour l'instaint c pas la gestion du listner qui me pose prob c que j'appui plusieurs fois sur le JLabel il m'affiche plusiuer fois les composante sur le JPanel ,noremalemnt j'aurais le meme prob si j'utilise un Jbutton .

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 64
    Par défaut
    Non tu n'auras pas le même problème avec le JButton si tu le désactives après le premier clic dessus je ne connais pas la fonction par cœur mais tu peux désactiver le bouton après avoir cliqué dessus ce qui, il me semble, règlerait ton problème ^^

  9. #9
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Par défaut
    Merci pour la remarque mias bon pour l'instaint c pas la gestion du listner qui me pose prob c que j'appui plusieurs fois sur le JLabel il m'affiche plusiuer fois les composante sur le JPanel ,noremalemnt j'aurais le meme prob si j'utilise un Jbutton .
    Si j'ai bien compris ton problème, c'est que si l'utilisateur clique plusieurs fois de suite sur ton JLabel, des composants sont réajoutés a ton panel autant de fois que l'utilisateur cliquera.

    Si tu utilise setEnabled avec un JButton, tu n'auras pas ce soucis.

    Si j'ai mal compris ta problématique, alors autant pour moi.

  10. #10
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Je viens de remplacer le JLabel par un Jbutton mais malheuresment c le meme prb c vrai que le bouton change de forme il devient défoncé mais en cliquant desus de nouvelles composantes s'affiche . voila le code du listner que j'ai modifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    bouton5.addMouseListener(new java.awt.event.MouseAdapter() {
                    		    public void mouseClicked(java.awt.event.MouseEvent evt) {
                    		    	bouton5.setEnabled(false);
     
                                  	jPanel2.revalidate();
     
                                	function();//affecter les composante au jpanel2
     
                                	jPanel2.setVisible(true);
                                	jPanel2.revalidate(); 
                    		    }
                    		});

  11. #11
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Par défaut
    Ce n'est pas le fait (direct) d'utiliser un bouton qui change le comportement.

    Mais le fait d'utiliser la méthode setEnabled(boolean) que tu peut utiliser avec un JButton.

    Avec un Jbutton tu n'utilise pas un MouseListener mais un ActionListener.

    Voici un exemple :

    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
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
     
    public class Go extends JFrame implements ActionListener {
     
    	JButton btn = new JButton("Open");
     
    	public Go() {
    		btn.addActionListener(this);
     
    		setContentPane(btn);
     
    		setSize(100,100);
    		setLocationRelativeTo(null);
    		setVisible(true);
    	}
     
    	public static void main(String[] args) {
    		new Go();
    	}
     
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		if (e.getSource() == btn) {
    			System.out.println("clic sur le bouton");
    			btn.setEnabled(false);
    			JFrame f = new JFrame("Seconde frame") {
    				@Override
    				public void dispose() {
    					btn.setEnabled(true);
    					super.dispose();
    				}
     
    			};
    			f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    			f.setSize(100,100);
    			f.setVisible(true);
    		}		
    	}
     
    }
    Si cela ne résoud pas ton problème, c'est que cela vient probablement d'autre chose.

  12. #12
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Merci ça marche maintenant .

  13. #13
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    visiwi

    un dernier detail ,comment fair pour afficher que le text du Jbutton pour qu ça soit comme un JLabel ?

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

Discussions similaires

  1. [JScrollPane] Affichage difficile du JPanel
    Par deadstar62 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 26/04/2007, 11h38
  2. [FEDORA] Gérer l'affichage
    Par k_boy dans le forum RedHat / CentOS / Fedora
    Réponses: 3
    Dernier message: 08/11/2006, 09h20
  3. gerer l'affichage d'une page web au demarrage
    Par josémaria dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/11/2006, 16h33
  4. [VS 2005] Comment gérer l'affichage DrawGrid ?
    Par Gold.strike dans le forum Visual Studio
    Réponses: 2
    Dernier message: 21/07/2006, 15h55
  5. DrawString et affichage dans un JPanel
    Par Flophx dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 06/05/2006, 18h38

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