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

 Java Discussion :

Probleme de Append dans un JTextArea


Sujet :

Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 14
    Par défaut Probleme de Append dans un JTextArea
    Voici mon probleme :
    je suis en train de crer un petit programme qui fait ceci :
    il fait un print de ca :
    aaaaa
    aaaab
    aaaac
    aaaad
    aaaae

    etc ...

    Mais voila que maintenant , j veux plus que ce soit dans la console , mais dans une fentre GUI. Je me lance dans NetBeans , je fais ma fenetre en Click'n'Drag et je fais JTextArea ... AUCUNE EREUR , c'est cool

    Mais voila que mon JTextArea n'ecris rien : voici le code :
    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
        private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
                  int i = 0;
                  String[] alpha = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"} ;
                  String[] temp = {"",""} ;
             for ( int lettre1 = 0 ; lettre1<alpha.length ; lettre1++ ){
                for ( int lettre2 = 0 ; lettre2<alpha.length ; lettre2++ ){
     
                   for ( int lettre3 = 0 ; lettre3<alpha.length ; lettre3++ ){
     
                      for ( int lettre4 = 0 ; lettre4<alpha.length ; lettre4++ ){
                         for ( int lettre5 = 0 ; lettre5<alpha.length ; lettre5++ ){
                            i++ ;
                            temp[0] = alpha[lettre1] + alpha[lettre2] + alpha [lettre3] + alpha[lettre4] + alpha[lettre5] ;
                            caracteretemp += (temp[0]+"\n");
                            System.out.println(caracteretemp);
                            brutus_conteneur.setText(caracteretemp);
                         }
                      }
                   }
                }
             }
    Ma question : que dois-je faire pour que mon JTextArea marche ? Meci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 119
    Par défaut
    Bonjour.

    Citation Envoyé par goldenmike Voir le message
    Ma question : que dois-je faire pour que mon JTextArea marche ? Meci
    Nous mettre du code plus complet : caracteretemp ? brutus_conteneur ? il est où le append ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 14
    Par défaut re
    oui , dsl , j'etais tete en l'air

    Caracteretemp ca c'est un autre truc c'est pas important mais ce qui est important :
    - brutus_conteneur : le JTextArea en question
    - le append : ben en fait , j'avais essayé :
    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
     private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
                  int i = 0;
                  String[] alpha = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"} ;
                  String[] temp = {"",""} ;
             for ( int lettre1 = 0 ; lettre1<alpha.length ; lettre1++ ){
                for ( int lettre2 = 0 ; lettre2<alpha.length ; lettre2++ ){
                
                   for ( int lettre3 = 0 ; lettre3<alpha.length ; lettre3++ ){
                   
                      for ( int lettre4 = 0 ; lettre4<alpha.length ; lettre4++ ){
                         for ( int lettre5 = 0 ; lettre5<alpha.length ; lettre5++ ){
                            i++ ;
                            temp[0] = alpha[lettre1] + alpha[lettre2] + alpha [lettre3] + alpha[lettre4] + alpha[lettre5] ;
                            caracteretemp += (temp[0]+"\n");
                            System.out.println(caracteretemp);
                            brutus_conteneur.append(caracteretemp);
                         }
                      }
                   }
                }
             }
    Voila.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut
    Salut,
    Ton code a l'air d'être bon.
    Le problème doit plutôt venir de la déclaration de brutus_conteneur ou peut être de ton bouton lui-même, arrives-tu à entrer dans ta méthode ?

  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,

    tu ne donne pas le code swing, peut-être le problème vient de la.

    Sinon, ton traitement est très long et il est probable que ce soit cela l'explication. Ton bouton doit rester enfoncé, et rien n'apparaît dans ton JTextAera ! Au bout d'un certain tu te lasse, tu quitte ton appli, et te dit que ça ne marche pas. En attendant plus longtemps, tu t'apercevrais que le texte s'affiche (peut-être une minute) mais d'un coup (a moins que tu n'es une OutOfMemoryException).
    La FAQ te renseignera un peu.
    Cela vient du fait du fonctionnement de swing. Les évènements sont propagés dans un Thread appelé EDT (Event Dispatch Thread). Toutes méthodes swing devrait aussi être exécuté dans l'EDT. Ici, ton traitement s'effecture entièrement dans l'EDT (car tu es dans un évènement) et celui-ci n'est "libéré" qu'à la fin de ton traitement (d'où le blocage de ton interface). Renseigne toi sur l'EDT (il ya des tuto et de nombreux post sur le forum) et le aussi les Thread.

    Voici un exemple complet avec seulement 3 boucles, ce qui est plus court et donc presque instantanée (ça marche parce que le traitement est plus court, mais ce n'est pas une bonne implémentation) :
    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
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
     
    public class Fenetre extends JFrame implements ActionListener {
     
    	public static void main(String[] args) {
    		Fenetre f = new Fenetre();
    		f.pack();
    		f.setLocationRelativeTo(null);
    		f.setVisible(true);
    	}
     
    	private JTextArea textArea;
     
    	public Fenetre() {
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
    		textArea = new JTextArea();
    		JButton btn = new JButton("string");
    		btn.addActionListener(this);
    		JPanel panel = new JPanel(new BorderLayout());
    		panel.add(new JScrollPane(textArea), BorderLayout.CENTER);
    		panel.add(btn, BorderLayout.SOUTH);
    		setContentPane(panel);
    	}
     
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		int i = 0;
    		String[] alpha = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
    				"k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
    				"w", "x", "y", "z" };
    		String temp = "";
    		for (int lettre1 = 0; lettre1 < alpha.length; lettre1++) {
    			for (int lettre2 = 0; lettre2 < alpha.length; lettre2++) {
     
    				for (int lettre3 = 0; lettre3 < alpha.length; lettre3++) {
     
    					i++;
    					temp = alpha[lettre1] + alpha[lettre2]	+ alpha[lettre3] + "\r\n";
    					textArea.append(temp);
    				}
    			}
    		}
    	}
     
    }

    Voici la solution pour ne plus bloquer ton interface, utiliser un Thread et appeler la méthode append dans l'EDT (il n'y que 4 boucles car 5 ça fait près de 12 millions (26^5) de ligne ce menera peut-être à un problème de mémoire !) :
    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
    70
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.SwingUtilities;
     
    public class Fenetre extends JFrame implements ActionListener {
     
    	public static void main(String[] args) {
    		Fenetre f = new Fenetre();
    		f.pack();
    		f.setLocationRelativeTo(null);
    		f.setVisible(true);
    	}
     
    	private JTextArea textArea;
     
    	public Fenetre() {
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
    		textArea = new JTextArea();
    		JButton btn = new JButton("string");
    		btn.addActionListener(this);
    		JPanel panel = new JPanel(new BorderLayout());
    		panel.add(new JScrollPane(textArea), BorderLayout.CENTER);
    		panel.add(btn, BorderLayout.SOUTH);
    		setContentPane(panel);
    	}
     
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		Thread thread = new Thread(new Runnable() {
    			@Override
    			public void run() {
    				String[] alpha = { "a", "b", "c", "d", "e", "f", "g", "h", "i",
    						"j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t",
    						"u", "v", "w", "x", "y", "z" };
    				for (int lettre1 = 0; lettre1 < alpha.length; lettre1++) {
    					for (int lettre2 = 0; lettre2 < alpha.length; lettre2++) {
     
    						for (int lettre3 = 0; lettre3 < alpha.length; lettre3++) {
     
    							for (int lettre4 = 0; lettre4 < alpha.length; lettre4++) {
    								final String temp = alpha[lettre1]
    										+ alpha[lettre2] + alpha[lettre3]
    										+ alpha[lettre4] + "\r\n";
    								SwingUtilities.invokeLater(new Runnable() {
    									@Override
    									public void run() {
    										textArea.append(temp);
    									}
    								});
    								try {
    									Thread.sleep(1);
    								} catch (InterruptedException e) {
    									// 
    								}
    							}
    						}
    					}
    				}
    			}
    		});
    		thread.start();
    	}
     
    }
    Tu as aussi des classes utilitaires qui permette de gérer les évènements long comme SwingWorker.

    Tout ceci est un gros morceau... Si tu débute en Swing peut-être devrais tu faire autre chose que des traitements lourds, dans un premier temps.

Discussions similaires

  1. Problème d'utilisation de append() dans un JTextArea
    Par youssoupha29 dans le forum NetBeans
    Réponses: 0
    Dernier message: 04/06/2012, 15h33
  2. Probleme dans un JTextArea
    Par issam_ovic dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 24/12/2009, 19h56
  3. [BPW]Problème de recherche dans une boîte liste
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 14
    Dernier message: 05/07/2003, 15h10
  4. Probleme d'éffacement dans le cookie
    Par Geulderack dans le forum XMLRAD
    Réponses: 6
    Dernier message: 02/04/2003, 14h17
  5. Probleme de filtre dans bdd
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/06/2002, 10h43

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