[java] c'est à n'y rien comprendre !

c'est à n'y rien comprendre ! [java] - Java - Programmation

Marsh Posté le 15-11-2003 à 17:11:41    

bonjour,
 
je sais que c'est le deuxième topic que je poste en peu de temps, mais là il vient de m'arriver un truc bizarre...
 
Dans mon programme j'ai un JPanel contenu lui même dans une JFrame, jusqu'ici tout va bien.
 
Au début de mon programme j'affiche dans mon Jpanel un message du genre "bienvenue", puis quelques secondes après j'affiche les consignes à suivre, puis "appuyer sur une touche quand vous êtes près".
 
Normalement mon programme affiche plusieurs mots à la suite, avec un délai bien précis pour chacun d'entre eux.
 
Si j'appuie sur une touche au moment de l'affichage des consignes je ne verai que le dernier mot apparaître pas les premiers !
Alors que si j'ajoute dans mon programme la fonction lancée par la méthode keyTyped, alors là je vois bien apparaître mes différents mots avec les bons temps de présentation !!!
 
J'avoue ne rein y comprendre, puisque celà me montre bien que ma méthode lancée par "keyTyped" fonctionne bien, et le fait de voir apparaître mon dernier mot prouve bien que cette méthode est lancée par "keyTyped" !
 
Si quelqu'un connait la raison, je veux bien comprendre.
 
Baba

Reply

Marsh Posté le 15-11-2003 à 17:11:41   

Reply

Marsh Posté le 15-11-2003 à 17:59:57    

personne ne veut me répondre ?

Reply

Marsh Posté le 15-11-2003 à 18:20:45    

ben comme ca on peut pas te dire pkoi ...
 
en tout ca moi j'ai pas d'idée ...


Message édité par benou le 15-11-2003 à 18:20:50

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-11-2003 à 18:26:48    

voila la tête de ma fonction "keyTyped"
 

Code :
  1. public void keyTyped(KeyEvent evt) { test();}


 
et voici la tete de ma fonction test() :

Code :
  1. public void test() {
  2. String[] couple = new String[3];
  3. couple = _donnees.getCouple();
  4. setKeyEtat(1);
  5.     
  6. _panel.setEtat(2);
  7. repaint();
  8. try{new Thread().sleep(500);}
  9. catch(Exception ex){};
  10. //_panel.setEtat(0);
  11. _panel.afficheTexte(couple[0]);
  12. //repaint();
  13. try{new Thread().sleep(70);}
  14. catch(Exception ex){};
  15. _panel.afficheTexte("XXXX" );
  16. //repaint();
  17. try{new Thread().sleep(100);}
  18. catch(Exception ex){};
  19. _panel.afficheTexte(couple[1]);
  20. repaint();
  21. try{new Thread().sleep(500);}
  22. catch(Exception ex){System.out.println("\nOK\n" );};
  23. _compt++;
  24. if (_compt > _donnees._mots.length)
  25.     setKeyEtat(3);
  26.     } // test


 
Mais sans passer par keyTyped ca marche normalement !!


Message édité par babthefox2002 le 15-11-2003 à 18:41:43
Reply

Marsh Posté le 15-11-2003 à 18:28:15    

sert toi des balises [ cpp] [ /cpp] pour afficher le code : la c'est illisible ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-11-2003 à 18:31:20    

bha écoute avec ton code comme ca, j'en sais rien ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-11-2003 à 18:41:43    

Citation :


Code :
  1. try{new Thread().sleep(100);}
  2.  catch(Exception ex){};




C'est pour faire quoi ?

Reply

Marsh Posté le 15-11-2003 à 18:43:05    

pour afficher le mot pendant 100 ms dans le JPanel

Reply

Marsh Posté le 15-11-2003 à 18:43:48    

une pause d'un 10e de secondes [:spamafote]


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-11-2003 à 18:54:51    

oui, c'est un peu spécial comme programme mais c'est tout à fait ça...
Mais le soucis c'est que sans passer par keyTyped() pour lancer cette méthode test() ça marche nickel, laors que là je ne vois que le dernier mot !!

Reply

Marsh Posté le 15-11-2003 à 18:54:51   

Reply

Marsh Posté le 15-11-2003 à 19:00:33    

il est gros ton code ? sinon balance le ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-11-2003 à 19:08:54    

bah ca fait pas loin de 300 lignes...
mais je vais regarder si je ne peux pas le réduire à ce qui m'intéresse...

Reply

Marsh Posté le 15-11-2003 à 19:09:37    

babthefox2002 a écrit :

bah ca fait pas loin de 300 lignes...
mais je vais regarder si je ne peux pas le réduire à ce qui m'intéresse...


et t'as regardé ma réponse sur ton autre topic ? :o


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-11-2003 à 19:18:10    

Code :
  1. import java.util.*;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5. import javax.swing.border.*;
  6. public class Semantik extends JFrame implements Runnable, KeyListener{
  7.     private int _keyEtat = -1;
  8.     private Affiche _panel;
  9.    
  10.     public Semantik() {
  11. super("Test de la mémoire" );
  12. _panel = new Affiche(this,0);
  13. getContentPane().add(_panel,BorderLayout.CENTER);
  14. addKeyListener (this);
  15. // on extrait les dimension de l'ecran
  16. Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  17. int screenHeight = screenSize.height;
  18. int screenWidth = screenSize.width;
  19. setSize(screenWidth/2,screenHeight/2);
  20. setLocation(screenWidth/4, screenHeight/4);
  21. setVisible(true);
  22. try{new Thread().sleep(2000);}
  23. catch (Exception ex){};
  24. consigne();
  25.     } // Semantik (constructeur)
  26.     void setKeyEtat(int a) {
  27. _keyEtat = a;
  28.     } // setKeyEtat
  29.     int getKeyEtat() {
  30. return(_keyEtat);
  31.     } // getKeyEtat
  32.     public void keyPressed(KeyEvent evt){}
  33.     public void keyReleased(KeyEvent evt){ } 
  34.     public void keyTyped(KeyEvent evt) {
  35. test();
  36. } // keyTyped
  37.    
  38.     /** Methode permettant de lancer le test */
  39.     public void test() {
  40. String[] couple = new String[2];
  41. couple[0] = "chapeau";
  42. couple[1] = "melon";
  43. setKeyEtat(1);
  44.     
  45. _panel.setEtat(2);
  46. repaint();
  47. try{new Thread().sleep(500);}
  48. catch(Exception ex){};
  49. _panel.afficheTexte(couple[0]);
  50. try{new Thread().sleep(70);}
  51. catch(Exception ex){};
  52. _panel.afficheTexte("XXXX" );
  53. try{new Thread().sleep(100);}
  54. catch(Exception ex){};
  55. _panel.afficheTexte(couple[1]);
  56. repaint();
  57. try{new Thread().sleep(500);}
  58. catch(Exception ex){System.out.println("\nOK\n" );};
  59.     } // test
  60.     /** Methode permettant d'afficher les consignes */
  61.     public void consigne(){
  62. _panel.setEtat(1);
  63. setKeyEtat(0);
  64. repaint();
  65.     } // consigne
  66.     public static void main(String[] args) {
  67. Semantik frame = new Semantik(); // on cree un objet Semantik()
  68.     } // main
  69.     public void run(){}
  70. } // Semantik (classe)
  71. class Affiche extends JPanel{
  72.     private Semantik _semantik;
  73.     private int _etat = 0;
  74.     private String _texte;
  75.     /* constructeur de la classe */
  76.     public Affiche(Semantik s, int etat){
  77. super();
  78. _semantik = s;
  79. _etat = etat;
  80.     } // Affiche (constructeur)
  81.     void setEtat(int x){
  82. _etat = x;
  83.     } // setEtat
  84.     int getEtat(){
  85. return(_etat);
  86.     } // getEtat
  87.     /** methode qui permet d'afficher le texte "t" donne en entree */
  88.     protected void afficheTexte(String t) {
  89. _texte = t;
  90. setEtat(3);
  91. repaint();
  92.     } // afficheTexte  
  93.     /** fonction publique permettant d'afficher différents texte */
  94.     public void paintComponent(Graphics g) {
  95. super.paintComponent(g);
  96. FontMetrics fm = getFontMetrics(getFont());
  97. switch(_etat) {
  98. case 0 : {
  99.     int y = (getSize().height - (fm.getHeight()/3))/2;
  100.     int x = (getSize().width - fm.stringWidth(HELLO))/2;
  101.     g.drawString(HELLO, x, y);
  102.     break;} // case 0
  103. case 1 : {
  104.     int y = 20;
  105.     int x = (getSize().width - fm.stringWidth(CONSIGNE))/2;
  106.     g.drawString(CONSIGNE, x, y);
  107.     break;
  108. } // case 1
  109. case 2 : {
  110.     int y = (getSize().height - (fm.getHeight()/3))/2;
  111.     int x = (getSize().width - fm.stringWidth(POINT_FIXATION))/2;
  112.     g.drawString(POINT_FIXATION, x, y);break;
  113. } // case 2
  114. case 3 : {
  115.     int y = (getSize().height - (fm.getHeight()/3))/2;
  116.     int x = (getSize().width - fm.stringWidth(_texte))/2;
  117.     g.drawString(_texte, x, y);break;
  118. } // case 3
  119. } // switch
  120.     } // paintComponent
  121.     final static String HELLO = "Bonjour et Bienvenue";
  122.     final static String CONSIGNE = "CONSIGNE";
  123.     final static String POINT_FIXATION = "+";
  124. } // Affiche (classe)


Message édité par babthefox2002 le 15-11-2003 à 20:02:12
Reply

Marsh Posté le 15-11-2003 à 19:19:58    

Code :
  1. et t'as regardé ma réponse sur ton autre topic ?


 
oui mais je n'ai pas encore eu le temps de tester...
Mais je ne sais pas si ca marche quand le texte est afficher sur un pannel !

Reply

Marsh Posté le 15-11-2003 à 19:29:17    

babthefox2002 a écrit :


oui mais je n'ai pas encore eu le temps de tester...
Mais je ne sais pas si ca marche quand le texte est afficher sur un pannel !


si tu avais dis que tu faisais de l'IHM :/


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-11-2003 à 19:33:33    

y compile pas ton code ... fais un effort ! :o


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-11-2003 à 19:57:55    

là ca doit aller, je l'ai modifié dans le message au dessus...

Reply

Marsh Posté le 15-11-2003 à 20:00:09    

babthefox2002 a écrit :

là ca doit aller, je l'ai modifié dans le message au dessus...


non.
 
Tu peux pas vérifier que ton code compile avant de l'envoyer ???  :pfff:


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-11-2003 à 20:03:14    

non la c'est bon c'est sûr je viens de tester...
 
Et tu veras bien qu'on ne voit apparaître que le mot "melon" et pas "chapeau", ni"+", ni "XXXX"

Reply

Marsh Posté le 15-11-2003 à 20:08:30    

verdoux a écrit :

Citation :


Code :
  1. try{new Thread().sleep(100);}
  2.  catch(Exception ex){};




C'est pour faire quoi ?


oups pardon, j'ai mal lu ...
 
effectivement, c'est n'importe quoi : "sleep()"  est une méthode static : faut pas faire de new ! Thread.sleep() suffit ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-11-2003 à 20:21:21    

j'y connais pas grand chose en IHM en java, mais visiblement, ca vient du fait que l'appel de repaint ne déclenche pas l'appel à paintComponent ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-11-2003 à 20:22:08    

et tu ne sais pas pourquoi ca ne fonctionne pas sinon ??

Reply

Marsh Posté le 15-11-2003 à 20:28:23    

ben non, sinon je te l'aurais dit ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-11-2003 à 20:48:23    

tant pis merci beaucoup d'avoir passé autant de temps a avoir essayé de m'aidé...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed