Problème java
Kais Clubiste
Messages postés
48
Date d'inscription
Statut
Membre
Dernière intervention
-
ddl -
ddl -
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 - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
8 réponses
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
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
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
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...
:)))) 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?