Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mettre à jour un JLabel

Sujet résolu
    16 avril 2012 à 12:45:00

    Bonjour à tous :)

    J'ai un problème pour mettre à jour un JLabel lors de l'appui sur un bouton. J'utilise la méthode suivante:
    public void actionPerformed(ActionEvent arg0) {
    		 
    		 res.setText("Une commande vient d'être passée");
    		 
    		 System.out.println("Une commande vient d'être passée");
     
              }
    


    Dans ma console le message s'affiche bien mais mon JLabel "res" n'est pas modifié.

    Voici la classe complète:

    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.File;
    import java.io.IOException;
    
    import javax.imageio.ImageIO;
    import javax.swing.Box;
    import javax.swing.BoxLayout;
    import javax.swing.DefaultListCellRenderer;
    import javax.swing.DefaultListModel;
    import javax.swing.JButton;
    import javax.swing.JFormattedTextField;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JSeparator;
    import javax.swing.border.LineBorder;
     
    public class Onglet_commande extends JPanel implements ActionListener {
     
    	private JButton commander = new JButton("Commander et payer");
    	private JLabel res = new JLabel();
    	
     
    	public Onglet_commande(){
     
    				// nos panels
    		
    		JPanel pan1 = new JPanel();
    		JPanel pan1b = new JPanel();
    		JPanel pan2 = new JPanel();
    		JPanel pan3 = new JPanel();
    		JPanel princ = new JPanel();
    		   // Pour les séparateurs
    		JPanel s1 = new JPanel(); 
    		JPanel s2 = new JPanel();
    		JPanel resultat = new JPanel();
    		// on les formes
    		pan1.setLayout(new BoxLayout(pan1, BoxLayout.LINE_AXIS));
    		pan1b.setLayout(new BoxLayout(pan1b, BoxLayout.LINE_AXIS));
    		pan2.setLayout(new BoxLayout(pan2, BoxLayout.LINE_AXIS));
    		pan3.setLayout(new BoxLayout(pan3, BoxLayout.LINE_AXIS));
    		princ.setLayout(new BoxLayout(princ, BoxLayout.PAGE_AXIS));
    		s1.setLayout(new BoxLayout(s1, BoxLayout.LINE_AXIS));
    		s2.setLayout(new BoxLayout(s2, BoxLayout.LINE_AXIS));
    		resultat.setLayout(new BoxLayout(resultat, BoxLayout.LINE_AXIS));
     
    		// les Label
     
    		JLabel pres = new JLabel("Bienvenue sur Fast Food and Fat");
    		pres.setFont(new Font("Tahoma", Font.BOLD, 30));
    		pres.setForeground(Color.ORANGE);
    		JLabel label_prod = new JLabel("Produits disponibles :");
    		label_prod.setFont(new Font("Tahoma", Font.BOLD, 20));
    		label_prod.setForeground(Color.GREEN);
    		JFormattedTextField nom_client = new JFormattedTextField();
    		nom_client.setBackground(Color.WHITE);
    		nom_client.setPreferredSize(new Dimension(120,30));
    		JLabel client = new JLabel("Nom du client :");
    		JLabel res = new JLabel("En attente d'affichage");
    		res.setSize(new Dimension(200,30));
    		
    		
    		// les séparateurs
    		
    		JSeparator sep1 = new JSeparator();
    		JSeparator sep2 = new JSeparator();
    		
    		
    		// le Panneau Commande
    		
    		
    		DefaultListModel<String> listModel = new DefaultListModel<String>();
    		JList<String> liste_produit = new JList<String>();
    		liste_produit.setCellRenderer(new DefaultListCellRenderer());
    		liste_produit.setModel(listModel);
    		liste_produit.setBorder(new LineBorder(Color.GREEN));
    		JScrollPane scroll1 = new JScrollPane(liste_produit);
    		for (int i=ProduitsEnVente.getProducts().size()-1 ; i>=0;i--){
    			ProduitsEnVente.getInstance();
    			String temp = ProduitsEnVente.getProducts().get(i).getNom_produit();
    			listModel.addElement(temp);
    		}
    		
    		
    		
     
     
    		// le Choix des boutons
     
    		
    		commander.setBackground(Color.RED);
    		commander.addActionListener(this);
    		JButton reinit = new JButton("Réinitialiser la commande");		
    		reinit.setBackground(Color.YELLOW);
    		pan1.add(pres);
    		s1.add(sep1);
    		pan1b.add(client);
    		pan1b.add(Box.createRigidArea(new Dimension(30,0)));
    		pan1b.add(nom_client);
    	    s2.add(sep2);
    		pan2.add(label_prod);
    		pan2.add(Box.createRigidArea(new Dimension(30,0)));
    		pan2.add(scroll1);
    		pan3.add(commander);
    		pan3.add(Box.createRigidArea(new Dimension(30,0)));
    		pan3.add(reinit);
    		resultat.add(res);
     
    		// on ajout dans le JPanel
    		
    		princ.add(pan1);
    		princ.add(Box.createRigidArea(new Dimension(0,30)));
    		princ.add(s1);
    		princ.add(Box.createRigidArea(new Dimension(0,30)));
    		princ.add(pan1b);
    		princ.add(Box.createRigidArea(new Dimension(0,30)));
    		princ.add(s2);
    		princ.add(Box.createRigidArea(new Dimension(0,30)));
    		princ.add(pan2);
    		princ.add(Box.createRigidArea(new Dimension(0,30)));
    		princ.add(pan3);
    		princ.add(Box.createRigidArea(new Dimension(0,30)));
    		princ.add(resultat);
    		add(princ);
     
    	}
     
    	public void paintComponent(Graphics g){
    		try {
    			Image img = ImageIO.read(new File("fastfood.jpg") );
    			g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
    		}
    		catch (IOException e){
    			e.printStackTrace();
    		}
    	}
    	
    	 public void actionPerformed(ActionEvent arg0) {
    		 
    		 res.setText("Une commande vient d'être passée");
    		 
    		 System.out.println("Une commande vient d'être passée");
     
              }
    }
    

    Je ne vois pas du tout où j'ai pu commettre une erreur...
    • Partager sur Facebook
    • Partager sur Twitter
      16 avril 2012 à 13:09:02

      Lignes 79 et 80: Enlèves les <String>

      Et à tout hasard, rajoutes super.paintComponent(g); dans ta méthode paintComponent().
      • Partager sur Facebook
      • Partager sur Twitter
      ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
        16 avril 2012 à 17:55:46

        Citation : Minde

        Lignes 79 et 80: Enlèves les <String>

        Et à tout hasard, rajoutes super.paintComponent(g); dans ta méthode paintComponent().



        J'ai modifié tout çà mais mon problème persiste. Pas de soucis dans la console mais le JLabel ne se met pas à jour.
        • Partager sur Facebook
        • Partager sur Twitter
          16 avril 2012 à 18:18:48

          Je te ferais remarqué que dans ton constructeur, tu crées une nouvelle instance JLabel res (ligne 66) et que c'est celle-ci que tu affiches sur ta fenêtre.
          Donc quand tu modifies le texte du JLabel res (ligne 28), tu ne modifies pas le JLabel affiché qui est le JLabel ligne 66, mais le JLabel ligne 28 qui n'est pas affiché..

          Ce qui est surprenant c'est que le compilateur ne sonne l'alarme comme quoi que tu as deux instance de nom identique :o !
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            16 avril 2012 à 18:20:18

            Tu as un "res" ligne 27 et un ligne 67. Es-tu sûr de modifier le bon ?

            Edit

            Citation : sheron

            Ce qui est surprenant c'est que le compilateur ne sonne l'alarme comme quoi que tu as deux instance de nom identique :o !



            Le premier res est une variable de classe et le deuxième, une variable locale. Donc 2 objets différents pour le compilateur. Le premier res reste accessible par this.res
            • Partager sur Facebook
            • Partager sur Twitter
              16 avril 2012 à 20:45:25

              C'était bien çà j'ai corrigé çà mais merci quand même de votre réponse :)
              • Partager sur Facebook
              • Partager sur Twitter

              Mettre à jour un JLabel

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown