Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'actualisation du JTextArea

Sujet résolu
    3 mars 2015 à 18:20:16

    Bonjour,

    J'essaye de faire une petite console, mais j'ai un problème avec l'actualisation du JTextArea mais pourtant j'ai tout essayer (setText, revalidate...) mais j'ai toujours le même problème.

    J'ai essayer avec un JTextPane mais toujours le même problème


    Pourtant mon code est "correcte"

    Console.java

    package modules;
    
    import modules.Command;
    
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.Label;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.BorderFactory;
    import javax.swing.BoxLayout;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    import javax.swing.SwingConstants;
    
    public class Console extends JFrame{
    	
    	private JPanel container = new JPanel();
    	private JButton entrer = new JButton("Entrer");
    	private JTextField jtf = new JTextField("");
    	
    	protected JTextArea ecran_info = new JTextArea();
    	
    	public void fenetre() {
    	    this.setTitle("Console");
    	    this.setSize(400, 400);
    	    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	    this.setLocationRelativeTo(null);
    	    
    	    container.setBackground(Color.white);
    	    container.setLayout(new BorderLayout());
    	    
    	    ecran_info.setEditable(false);
    	    ecran_info.setText("Bienvenue dans la console");
    	    
    	    
    	    JPanel sud = new JPanel();
    	    sud.setLayout(new BoxLayout(sud, BoxLayout.LINE_AXIS));
    	    
    	    jtf.setForeground(Color.BLACK);
    	    jtf.setPreferredSize( new Dimension(300, 30 ) );
    	    
    	    sud.add(jtf);
    	    
    	    entrer.addActionListener(new Bouton());
    	    
    	    sud.add(entrer);
    	    
    	    container.add(ecran_info, BorderLayout.CENTER);
    	    container.add(sud, BorderLayout.SOUTH);
    
    	    this.setContentPane(container);
    	    this.setVisible(true);  
    	}
    	
    	public void ajouter_texte(String message) {
    		System.out.println("La variable 'message' : "+message);
    		ecran_info.append(message);
    	}
    	
    	class Bouton implements ActionListener {
    	
    		public void actionPerformed(ActionEvent arg0){
    			new Command(jtf.getText());
    		}
    	}
    
    }

    Command.java

    package modules;
    
    import modules.Console;
    
    public class Command {
    	
    	Console console = new Console();
    	
    	private String command[] = {
    			"message"
    	};
    	
    	public Command(String text) {
    		
    		if(text.equals(command[0])) {
    			System.out.println("Teste de la commande 'message'");
    			console.ajouter_texte(text);
    		}
    		else
    		{
    			System.out.println("Cette command n'existe pas");
    		}
    	}
    	
    	
    }

    main.java

    import modules.Console;
    
    public class main {
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Console console = new Console();
    		console.fenetre();
    	}
    }
    



    Merci d'avance pour l'aide

    -
    Edité par Greenlio 4 mars 2015 à 12:11:34

    • Partager sur Facebook
    • Partager sur Twitter
      4 mars 2015 à 11:28:16

      Bonjour,

      Est-ce que ce serait possible de voir ton main ?

      Car je pense que dans ton main tu créé un nouvel objet Console, or lorsque l'on clique sur le bouton "entrer", tu recrées un objet Console.

      Ainsi lorsque tu fait un console.ajouter_texte(text) dans la classe Command, tu modifies le texte de la console appartenant à Command.

      Le principe pour résoudre ce problème est simple: au lieu d'initialiser une nouvelle console dans la classe Command, tu ajoutes un paramètre dans ton constructeur Command de type Console. Puis tu affectes cet objet à ton attribut:

      public class Command {
         private Console console;
      
         public Command(String text, Console cons){
            this.console = cons;
            
            if(text.equals...
            // suite de ton code
         }
      }

      Ensuite dans ton écouteur Bouton:

      class Bouton implements ActionListener {
           
         public void actionPerformed(ActionEvent arg0){
               new Command(jtf.getText(), this);
         }
      }





      -
      Edité par TwinkleMad 4 mars 2015 à 11:29:09

      • Partager sur Facebook
      • Partager sur Twitter
      A toi de jouer !
        4 mars 2015 à 12:13:39

        J'ai modifier mon message d'en haut
        • Partager sur Facebook
        • Partager sur Twitter
          4 mars 2015 à 13:37:12

          Oui c'est bien ce que je pensais: tu manipules deux objets de type Command : un que tu créés dans le main et l'autre que tu créés dans la classe Bouton..

          Du coup quand tu mets à jour le texte de l'un, le texte de l'autre n'est pas modifié donc tu peux toujours essayer de mettre à jour la vue, il ne va pas y avoir de changement.

          • Partager sur Facebook
          • Partager sur Twitter
          A toi de jouer !
            4 mars 2015 à 15:25:23

            J'ai résolu mon problème,

            j'ai modifié l’interaction du bouton :

            @Override
            	public void actionPerformed(ActionEvent arg0) {
            		// TODO Auto-generated method stub
            		new Command(jtf.getText(), this);
            	}

            J'ai implanté ActionListener a la classe Console :

            public class Console extends JFrame implements ActionListener

            J'ai aussi ajouté un argument a Command :

            public Command(String texte, Console cons)

            Merci TwinkleMad

            • Partager sur Facebook
            • Partager sur Twitter

            Problème d'actualisation du JTextArea

            × 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