Problème java
Fermé
Kais Clubiste
Messages postés
48
Date d'inscription
jeudi 23 juillet 2009
Statut
Membre
Dernière intervention
16 janvier 2012
-
12 mars 2011 à 13:25
ddl - 9 avril 2011 à 12:32
ddl - 9 avril 2011 à 12:32
Bonjour, j'ai un problème au niveau d'une application java Netbeans
j'utilise une classe qui fait l'affichage des lignes dans une boucle infinie
l'affichage est réussi en mode console mais mon problème c'est que j'ai fais le développement d'une interface graphique la ou je veux faire mon affichage dans un jTextField en cliquant sur un bouton
Le problème c'est que le bouton reste bloqué et rien ne s'affiche :((((
SVP a mon aide
j'utilise une classe qui fait l'affichage des lignes dans une boucle infinie
l'affichage est réussi en mode console mais mon problème c'est que j'ai fais le développement d'une interface graphique la ou je veux faire mon affichage dans un jTextField en cliquant sur un bouton
Le problème c'est que le bouton reste bloqué et rien ne s'affiche :((((
SVP a mon aide
A voir également:
- Problème java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java décompiler - Télécharger - Langages
8 réponses
Utilisateur anonyme
12 mars 2011 à 18:47
12 mars 2011 à 18:47
Salut,
Il me semble que tu as oublié qu'un JTextField ne peut contenir qu'UNE ligne.
Il faudrait utiliser une JTextArea pour pouvoir afficher toutes les lignes...
Cordialement,
Dan
Il me semble que tu as oublié qu'un JTextField ne peut contenir qu'UNE ligne.
Il faudrait utiliser une JTextArea pour pouvoir afficher toutes les lignes...
Cordialement,
Dan
Kais Clubiste
Messages postés
48
Date d'inscription
jeudi 23 juillet 2009
Statut
Membre
Dernière intervention
16 janvier 2012
1
13 mars 2011 à 10:58
13 mars 2011 à 10:58
Meme Probleme qu'avec un jTextArea vraiment chui bloqué :(((((
Utilisateur anonyme
13 mars 2011 à 18:14
13 mars 2011 à 18:14
Salut,
Sans code il nous est impossible de deviner ce qui cloche (à part le fait que tu ne peux afficher qu'une ligne dans JTextField).
Dan
Sans code il nous est impossible de deviner ce qui cloche (à part le fait que tu ne peux afficher qu'une ligne dans JTextField).
Dan
salut tout le monde;
j ai le même problème et je serai reconnaissante si vous essayé de m'aider.
voici un exemple:
le problème est que le JTextArea affiche tout le texte après qu'il finisse;
dans le cas d'une boucle infinie il ne finit jamais;
j ai le même problème et je serai reconnaissante si vous essayé de m'aider.
voici un exemple:
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.JTextArea; public class essayer extends JFrame implements ActionListener{ /** * @param args */ JPanel pan1=null; JTextArea x=null; JButton ajouter=null; JButton stopper=null; public essayer(){ this.setTitle("Fenetre Principale"); this.setSize(700,600); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null); this.setResizable(false); pan1= new JPanel(); this.setContentPane(pan1); pan1.setLayout(null); x=new JTextArea(); x.setBounds(100,100,500, 150); pan1.add(x); ajouter=new JButton("Ajouter"); ajouter.setBounds(150,50,120,30); ajouter.addActionListener(this); pan1.add( ajouter); stopper=new JButton("Stopper"); stopper.setBounds(300,50,120,30); stopper.addActionListener(this); pan1.add( stopper); } public static void main(String[] args) { // TODO Auto-generated method stub new essayer(); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource().equals(ajouter)){ while (true){ x.append("quelque chose"+"\n"); } }else{ } } }
le problème est que le JTextArea affiche tout le texte après qu'il finisse;
dans le cas d'une boucle infinie il ne finit jamais;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
7 avril 2011 à 01:43
7 avril 2011 à 01:43
Bonjour,
Il suffit de supprimer impérativement la boucle.
Ajouter le test du clique du bouton stopper (if(e.getSource().equals(stopper)){)
sinon le clique est sans effet.
Ce qui n'empèche pas la possibilité de sortir en fermant la fenêtre (X).
Ci-dessous le code modifié (les modifs sont commentées).
J'ai également changé le nom de la classe essayer en Essayer et celui de la la méthode essayer() en Essayer() qui devient donc constructeur.
Il reste à ajouter un JScrollPane car si on crée plus de 10 lignes, à partir de la 11eme elles sont invisibles.
Bien entendu avec cet exemple on ne peut rien faire d'autre que l'affichage.
Cordialement,
Dan
Il suffit de supprimer impérativement la boucle.
Ajouter le test du clique du bouton stopper (if(e.getSource().equals(stopper)){)
sinon le clique est sans effet.
Ce qui n'empèche pas la possibilité de sortir en fermant la fenêtre (X).
Ci-dessous le code modifié (les modifs sont commentées).
J'ai également changé le nom de la classe essayer en Essayer et celui de la la méthode essayer() en Essayer() qui devient donc constructeur.
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.JTextArea; public class Essayer extends JFrame implements ActionListener { // pour ajouter le nombre de fois n que le bouton ajouter est cliqué // soit "quelque chose n" private int ctrAjout = 0; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< /** * @param args */ JPanel pan1=null; JTextArea x=null; JButton ajouter=null; JButton stopper=null; public Essayer() { this.setTitle("Fenetre Principale"); this.setSize(700,600); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null); this.setResizable(false); pan1= new JPanel(); this.setContentPane(pan1); pan1.setLayout(null); x=new JTextArea(); x.setBounds(100,100,500, 150); pan1.add(x); ajouter=new JButton("Ajouter"); ajouter.setBounds(150,50,120,30); ajouter.addActionListener(this); pan1.add( ajouter); stopper=new JButton("Stopper"); stopper.setBounds(300,50,120,30); stopper.addActionListener(this); pan1.add( stopper); } public static void main(String[] args) { // TODO Auto-generated method stub new Essayer(); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource().equals(ajouter)) { //while (true) // suppression de la boucle //{ ctrAjout++; //<<<<<<<<<<<<<<<<<<<<<<<< x.append("quelque chose " + ctrAjout+"\n"); //<<<<<<<<<<<<<<<<<<<<<<<<< System.out.println("ctrAjout = " + ctrAjout); //<<<<<<<<<<<<<<<<<<<<<<<<< //} } else // ou bien fermer la fenêtre { if(e.getSource().equals(stopper)) //Sans ce test le bouton stopper ne sert à rien System.out.println("\nVous avez créé " + ctrAjout + " lignes."); System.exit(0); } } }
Il reste à ajouter un JScrollPane car si on crée plus de 10 lignes, à partir de la 11eme elles sont invisibles.
Bien entendu avec cet exemple on ne peut rien faire d'autre que l'affichage.
Cordialement,
Dan
Utilisateur anonyme
Modifié par danimo le 8/04/2011 à 01:21
Modifié par danimo le 8/04/2011 à 01:21
Re,
Mon exemple permet d'ajouter une ligne quand on clique sur ajouter.
Si tu veux en ajouter plusieurs il faudra effecticement une boucle, mais pas une boucle sans fin.
Par exemple une boucle qui permattra d'ajouter n lignes, mais sans compter sur le bouton stopper car 99 fois sur 100 (et même plus) on aura déjà ajouté un bon nombre de lignes avant l'arrêt escompté...
Le bouton stopper ne sert qu'à sortir du programme.
Supposons qu'on veut ajouter 4 lignes (pas trop car on n'a pas de Scroll):
Pour le tester; ce code est à mettre à la place de:
Si on clique une nouvelle fois sur ajouter on ajoute encore le 4 mêmes lignes.
Dans la réalité, le trairement consisterait par exemple à ajouter les lignes d'un fichier texte...
Dan
Mon exemple permet d'ajouter une ligne quand on clique sur ajouter.
Si tu veux en ajouter plusieurs il faudra effecticement une boucle, mais pas une boucle sans fin.
Par exemple une boucle qui permattra d'ajouter n lignes, mais sans compter sur le bouton stopper car 99 fois sur 100 (et même plus) on aura déjà ajouté un bon nombre de lignes avant l'arrêt escompté...
Le bouton stopper ne sert qu'à sortir du programme.
Supposons qu'on veut ajouter 4 lignes (pas trop car on n'a pas de Scroll):
int n = 4; for(int i = 1; i < n+1; i++) { String line = "Ligne " + i + "\n"; x.append(line); ctrAjout++; }
Pour le tester; ce code est à mettre à la place de:
ctrAjout++; x.append("quelque chose " + ctrAjout+"\n"); System.out.println("ctrAjout = " + ctrAjout);
Si on clique une nouvelle fois sur ajouter on ajoute encore le 4 mêmes lignes.
Dans la réalité, le trairement consisterait par exemple à ajouter les lignes d'un fichier texte...
Dan
merci beaucoup pour la deuxième fois,
oui, ça marche avec un nombre limité d'itérations car le JTextArea affiche tous à la fois et à la fin.
(et j'ai ajouté un JScrollPane, pas de problème(; )
je croix que je dois chercher un autre composant graphique si je veux un affichage successif des lignes, car je ne voie aucune solution avec le JTextArea...
oui, ça marche avec un nombre limité d'itérations car le JTextArea affiche tous à la fois et à la fin.
(et j'ai ajouté un JScrollPane, pas de problème(; )
je croix que je dois chercher un autre composant graphique si je veux un affichage successif des lignes, car je ne voie aucune solution avec le JTextArea...
sakoba2010
Messages postés
157
Date d'inscription
lundi 7 février 2011
Statut
Membre
Dernière intervention
24 juillet 2013
15
8 avril 2011 à 17:00
8 avril 2011 à 17:00
Utilises un Thread et tout sera réglé.
:)))) j'ai utilisé un thread et ça marche, voici le code:
j'ai une autre question: si je fais "stopper" puis je veux reprendre, je dois faire quoi?
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 essayer extends JFrame implements ActionListener{ /** * @param args */ JPanel pan1=null; JTextArea x=null; JButton ajouter=null; JButton stopper=null; UnThread thread =null; public essayer(){ this.setTitle("Fenetre Principale"); this.setSize(700,600); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null); this.setResizable(false); pan1= new JPanel(); this.setContentPane(pan1); pan1.setLayout(null); x=new JTextArea(); thread = new UnThread(); JScrollPane sp=new JScrollPane(x); sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); sp.setBounds(100,100,500, 150); pan1.add(sp); ajouter=new JButton("Ajouter"); ajouter.setBounds(150,50,120,30); ajouter.addActionListener(this); pan1.add( ajouter); stopper=new JButton("Stopper"); stopper.setBounds(300,50,120,30); stopper.addActionListener(this); pan1.add( stopper); } public static void main(String[] args) { // TODO Auto-generated method stub new essayer(); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource().equals(ajouter)){ thread.start(); }else{ if(e.getSource().equals(stopper)) thread.stop() ; } } class UnThread extends Thread{ public void run() { long start = System.currentTimeMillis(); // boucle tant que la durée de vie du Thread est < à 10 secondes while( System.currentTimeMillis() < ( start + (1000 * 10))) { x.append("quelque chose"+"\n"); try { // pause Thread.sleep(150); } catch (InterruptedException ex) {} } } } }
j'ai une autre question: si je fais "stopper" puis je veux reprendre, je dois faire quoi?
sakoba2010
Messages postés
157
Date d'inscription
lundi 7 février 2011
Statut
Membre
Dernière intervention
24 juillet 2013
15
9 avril 2011 à 10:25
9 avril 2011 à 10:25
Dans ce cas il faut utiliser méthode synchronisée qui retourne deux états (true/false) .
Bon courage
Bon courage