Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1971 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Probleme avec Jpanel

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme avec Jpanel

n°551525
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 14:30:32  profilanswer
 

Alors, d'abord, ne m'incendiez pas trop vite, je débute carrément.  :D  
 
Je suis en train de faire un genre de topstyle dans jEdit.
 
Quand je clique sur une propriété dans le xinsert, je déclenche l'ouverture d'un Jpanel.
 
Au départ, ce Jpanel s'appuyait sur un field panel. Or, moi, il me faut un JComboBox pour lister les propriétés à rentrer.
 
Tout marche parfaitement sauf que :
 
1) Quand j'appuie sur Entrée ou OK, il ne se passe rien.
2) Quand je clique sur une propriété dans le JComboBoc, LA PREMIERE FOIS, je dois recliquer pour faire disparaitre la liste.
 
Pourriez-vous me donner un petit coup de main, sachant que c'est pour la bonne cause, et que je suis conscient qu'il faut que j'apprenne réellement le java pour pouvoir faire ce que je veux faire.  :)  
 

Code :
  1. // import statements
  2. import javax.swing.border.*;
  3. // main routine
  4. void azimutDialog()
  5. {
  6.     // create dialog object and set its features
  7.     title = "azimuth";
  8.     dialog = new JDialog(view, title, false);
  9.     content = new JPanel(new BorderLayout());
  10.     content.setBorder(new EmptyBorder(12, 12, 12, 12));
  11.     dialog.setContentPane(content);
  12.     // add to the dialog a panel containing the text fields for
  13.     // entry of the prefix
  14.     fieldPanel = new JPanel(new GridLayout(4, 1, 0, 6));
  15.     prefixField = new JComboBox();
  16.     prefixLabel = new JLabel("valeur :" );
  17.    
  18.     // valeurs
  19.    
  20.     String[] comboContenu = {"inherit","left-side","far-left","center-left","center-right","far-right","right-side","leftwards","rightwards","left","center","right","behind"};
  21.    
  22.    
  23.     prefixField.insertItemAt(comboContenu[0], 0);
  24.     prefixField.insertItemAt(comboContenu[1], 1);
  25.     prefixField.insertItemAt(comboContenu[2], 2);
  26.     prefixField.insertItemAt(comboContenu[3], 3);
  27.     prefixField.insertItemAt(comboContenu[4], 4);
  28.     prefixField.insertItemAt(comboContenu[5], 5);
  29.     prefixField.insertItemAt(comboContenu[6], 6);
  30.     prefixField.insertItemAt(comboContenu[7], 7);
  31.     prefixField.insertItemAt(comboContenu[8], 8);
  32.     prefixField.insertItemAt(comboContenu[9], 9);
  33.     prefixField.insertItemAt(comboContenu[10], 10);
  34.     prefixField.insertItemAt(comboContenu[11], 11);
  35.     prefixField.insertItemAt(comboContenu[12], 12);
  36.    
  37.     prefixField.setSelectedIndex(0);
  38.        
  39.    
  40.     fieldPanel.add(prefixLabel);
  41.     fieldPanel.add(prefixField);
  42.    
  43.     content.add(fieldPanel, "Center" );
  44.     // add a panel containing the buttons
  45.     buttonPanel = new JPanel();
  46.     buttonPanel.setLayout(new BoxLayout(buttonPanel,
  47.     BoxLayout.X_AXIS));
  48.     buttonPanel.setBorder(new EmptyBorder(12, 50, 0, 50));
  49.     buttonPanel.add(Box.createGlue());
  50.     ok = new JButton("OK" );
  51.     cancel = new JButton("Cancel" );
  52.    
  53.     dialog.getRootPane().setDefaultButton(ok);
  54.     buttonPanel.add(ok);
  55.    
  56.     buttonPanel.add(cancel);
  57.    
  58.     content.add(buttonPanel, "South" );
  59.     // register this method as an ActionListener for
  60.     // the buttons and text fields
  61.    
  62.     ok.addActionListener(this);
  63.     cancel.addActionListener(this);
  64.     prefixField.addActionListener(this);
  65.    
  66.     // locate the dialog in the center of the
  67.     // editing pane and make it visible
  68.     dialog.pack();
  69.     dialog.setLocationRelativeTo(view);
  70.     dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
  71.     dialog.setVisible(true);
  72.     // this method will be called when a button is clicked
  73.     // or when ENTER is pressed
  74.     void actionPerformed(e)
  75.     {
  76.         if(e.getSource() != cancel)
  77.         {
  78.             processText();
  79.         }
  80.         dialog.dispose();
  81.     }
  82.    
  83.     void processText()
  84.     {
  85.       prefix = prefixField.getText();
  86.       textArea.setSelectedText(prefix); 
  87.     }
  88.    
  89. }
  90. azimutDialog();


 
Voilà où j'en suis.
 
Je suis tout étonné d'avoir réussi à aller jusque là, puisqu'il n'y a aucun exemple d'utilisation du JComboBox dans Jedit au niveau des macros.  :pt1cable:


Message édité par Hermes le Messager le 27-10-2003 à 15:33:52
mood
Publicité
Posté le 27-10-2003 à 14:30:32  profilanswer
 

n°551598
LetoII
Le dormeur doit se réveiller
Posté le 27-10-2003 à 15:21:52  profilanswer
 

Bon alors déjà y a un constructeur pour les combobox qui prend un tableau d'objet, ça ira plus vite ;)
 
Et puis va voir les tuto ici:
 
java.sun.com
 
Il est défini où textArea ?


Message édité par LetoII le 27-10-2003 à 15:29:26

---------------
Le Tyran
n°551606
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 15:27:58  profilanswer
 

Oula oula, je suis loin d'avoir le niveau suffisant pour m'en sortir tout seul je pense. Dans quelques mois, je pense que oui, parce que j'ai fait pas mal de C et de PHP. Mais pour le moment, je bloque.
Je me suis mis au java hier soir seulement. :D  
 
Je reconnais que je ne devrais pas poser ma question maintenant, mais comme je bosse sur un projet qui va intéresser toute la communauté, je me le permet quand même.
 
J'ai déjà réussi à utiliser le sélecteur de couleur pour insérer un color: la_couleur; dans le textarea. Si j'arrive à maitriser ce problème de liste, je vais pouvoir recréer PARFAITEMENT Topstyle dans JEdit. :)

n°551613
lorill
Posté le 27-10-2003 à 15:31:46  profilanswer
 

Code :
  1. void processText()
  2.         {
  3.             textArea.setSelectedText(prefix); 
  4.         }


 
il est défini ou prefix ? tu le positionne ou ?

n°551615
the real m​oins moins
Posté le 27-10-2003 à 15:35:19  profilanswer
 

je soupçonne que c'est du bean shell, jme trompe? :)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°551616
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 15:36:11  profilanswer
 

Désolé, je me suis trompé en copiant/collant. J'ai édité mon code. (c'est à la fin).
 
Mais, ça ne change rien au problème, parce que de toutes manières, même si je fais :
 

Code :
  1. textArea.setSelectedText("coucou" );

 
 
ça ne marche pas et SURTOUT le Jpanel ne se ferme pas. C'est incompréhensible parce que pour mon code précédent (le sélecteur de couleur) :
 

Code :
  1. selection = textArea.getSelectedText();
  2. if (selection != null)
  3.     color = GUIUtilities.parseColor(selection);
  4. else
  5.     color = null;
  6. color = JColorChooser.showDialog(view, "Color Picker", color);
  7. if (color != null)
  8.     textArea.setSelectedText("color : "+GUIUtilities.getColorHexString(color)+";" );


 
ça marche parfaitement.
 

n°551619
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 15:39:29  profilanswer
 

the real moins moins a écrit :

je soupçonne que c'est du bean shell, jme trompe? :)
 


Non, c'est bien du Bean shell, mais en fait, c'est presque du java avec des classes déjà implémentées. Mais dans le cas du combobox, c'est spécial, parce que justement, il ne semblait pas implémenté au départ.
Hors mon code marche parfaitement, je veux dire : je vois bien le combobox et je peux sélectionner une option dedant, mais pas moyen ensuite de valider mon choix. Le bouton OK réagit, mais rien ne se passe, et le Jpanel reste affiché.
Par contre le cancel marche parfaitement.
 
Merci de me donner un petit coup de main (d'autant qu'habituellement, je suis moi-même contre ce genre de situation où un gars arrive et n'a pas le niveau suffisant sur un problème donné et compte un peu sur les autres.) ;)

n°551621
the real m​oins moins
Posté le 27-10-2003 à 15:40:31  profilanswer
 

ben pour le coup du bean shell c'etait juste que ça explique que c'est pas toi qui définit textArea et prefix par exemple ;)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°551624
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 15:44:36  profilanswer
 

Si, prefix, c'est moi. Je pourrait mettre une autre variable à la place. Le textArea non par contre, c'est celui de jEdit.
 
Mais de toutes manières, j'ai bcp de mal à comprendre pourquoi dans le 2° code (celui du sélecteur de couleur), tout marche parfaitement, et pas dans mon cas. Tout ce que je veux, c'est récupérer le résultat du combobox pour le mettre à l'emplacement du curseur dans le textare.
 
Dans le cas d'un simple input, j'y arrive déjà sans probleme par exemple.

n°551625
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 15:46:48  profilanswer
 

En fait, ce que je demande, c'est que qqu me donne un petit coup de main pour que je puisse faire cet arbre CSS + XHTML.
 
Cela permettra par exemple de faire apparaitre des Jpanel pour chaque propriété avec un choix dedant.
 
Le sélecteur de couleur : c'est rêglé.
Le sélecteur de fichier : aussi.
Le sélecteur input : également.
 
Il ne me reste plus que ce problème de combobox. :)

mood
Publicité
Posté le 27-10-2003 à 15:46:48  profilanswer
 

n°551629
the real m​oins moins
Posté le 27-10-2003 à 15:47:14  profilanswer
 

void actionPerformed(e)
        {
              if(e.getSource() != cancel)
              {
                    processText();
              }
              dialog.dispose();
        }


 
ta methode processText est bien appelée?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°551631
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 15:48:40  profilanswer
 

the real moins moins a écrit :

void actionPerformed(e)
        {
              if(e.getSource() != cancel)
              {
                    processText();
              }
              dialog.dispose();
        }


 
ta methode processText est bien appelée?


 
Justement, c'est la question que je me pose. Comment je pourrais le savoir ?  
Le cancel fonctionne parfaitement lui.

n°551643
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 15:55:28  profilanswer
 

Pour ceux qui ont installé jEdit, regardez ce que j'ai réussi à faire :
 
http://tousleschats.free.fr/hermes [...] insert.xml
 
Mettez ce fichier dans windows/.jedit
 
ou documents and settings/[pseudo]/.jedit  
 
:)
 

n°551646
the real m​oins moins
Posté le 27-10-2003 à 15:56:16  profilanswer
 

ben le cancel fonctionne, c bcp dire, il fait rien ;)
la methode processText elle est definie ou!?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°551647
the real m​oins moins
Posté le 27-10-2003 à 15:56:34  profilanswer
 

euh c bon j'ai vu :D


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°551648
the real m​oins moins
Posté le 27-10-2003 à 15:57:04  profilanswer
 

ben rajoute un System.out.println("pouet" ) dedans :o
(tu le verras si t'as démarré jedit en console, ou bien dans des logs peut etre)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°551649
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 15:57:18  profilanswer
 

Ben là :
 

Code :
  1. void processText()
  2.         {
  3.             prefix = prefixField.getText();
  4.             textArea.setSelectedText(prefix); 
  5.         }


 
enfin je crois...

n°551650
the real m​oins moins
Posté le 27-10-2003 à 15:58:44  profilanswer
 

euh , definition de prefixField , et dans prefix c quoi comme objet ?
et la methode setSelectedArea elle prend quoi comme argument..


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°551652
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 16:00:43  profilanswer
 

the real moins moins a écrit :

euh , definition de prefixField , et dans prefix c quoi comme objet ?
et la methode setSelectedArea elle prend quoi comme argument..


 
Oublies pour l'instant le problème de prefix. C'est surtout que textArea.setSelectedText("coucou" ); ne fonctionne pas non plus. Donc apparemment, il n'arrive pas à processText  :)  
 
C'est ce que j'aimerais comprendre en premier en fait.  :)  
 
Merci pour l'aide en tous cas.  :jap:


Message édité par Hermes le Messager le 27-10-2003 à 16:01:09
n°551673
the real m​oins moins
Posté le 27-10-2003 à 16:20:31  profilanswer
 

ben le truc c'est que je suis pas convaincu que textArea.setSelectedText("coucou" ); doivent marcher...
 
c'est quoi comme object textArea??? (bordel)
qd tu sais ça, tu vas mater la javadoc de l'objet en question


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°551677
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 16:24:06  profilanswer
 

selection = textArea.getSelectedText();
textArea.setSelectedText("couc" );
 
Marche parfaitement. :D
 
Si je fais une macro juste avec ces deux lignes, j'ai bien couc dans le textarea de jEdit.

n°551679
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 16:25:25  profilanswer
 

Mieux, si je mets selection = textArea.getSelectedText();
au début du code que j'ai posté au début, ça affiche bien "couc"
 

n°551689
the real m​oins moins
Posté le 27-10-2003 à 16:37:03  profilanswer
 

bon tu reponds à la question ou tu retournes faire du php hein [:mmmfff]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°551695
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 16:53:59  profilanswer
 

the real moins moins a écrit :

bon tu reponds à la question ou tu retournes faire du php hein [:mmmfff]


 
textArea - a JEditTextArea is the visible component that displays the file being edited. It is derived from the JComponent class. The variable textArea represents the current JEditTextArea object, which in turn displays the current buffer.
 
NONNNN, pas le PHP  :D

n°551709
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 17:15:18  profilanswer
 

Bon, oublions aussi ce problème.
 
Comment récupérer le résultat du click sur OK ou sur cancel en java ?
 
(PS pour le "prefix", c'est bon en fait : String prefix = (String)prefixField.getSelectedItem(); )
 

n°551799
the real m​oins moins
Posté le 27-10-2003 à 18:56:13  profilanswer
 

comment ça le RESULTAT?
dans ton cas, qd un click est fait sur un truc ajouté avec comme ActionListener la classe en cours (this), la methode actionPerformed(e) est appelée. le if (e....) est vrai si ce n'est pas le bouton cancel (c'est donc le OK dans ton cas)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°551801
the real m​oins moins
Posté le 27-10-2003 à 18:56:59  profilanswer
 

http://www.jedit.org/42docs/api/or [...] ng.String)
 
Replaces the selection at the caret with the specified text. If there is no selection at the caret, the text is inserted at the caret position.
 
vérifie la position du "caret" :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°551812
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 19:08:35  profilanswer
 

Bon, j'ai tout simplifié à l'extrême :
 
j'ai ça :
 

Code :
  1. import javax.swing.border.*;
  2. title = "azimuth";
  3. dialog = new JDialog(view, title, false);
  4. content = new JPanel(new BorderLayout());
  5. content.setBorder(new EmptyBorder(12, 12, 12, 12));
  6. dialog.setContentPane(content);
  7. fieldPanel = new JPanel(new GridLayout(4, 1, 0, 6));
  8. azimuthLabel = new JLabel("infos : " );
  9. fieldPanel.add(azimuthLabel);
  10. content.add(fieldPanel, "Center" );
  11. buttonPanel = new JPanel();
  12. buttonPanel.setLayout(new BoxLayout(buttonPanel,BoxLayout.X_AXIS));
  13. buttonPanel.setBorder(new EmptyBorder(12, 50, 0, 50));
  14. buttonPanel.add(Box.createGlue());
  15. ok = new JButton("OK" );
  16. cancel = new JButton("Cancel" );
  17. ok.setPreferredSize(cancel.getPreferredSize());
  18. dialog.getRootPane().setDefaultButton(ok);
  19. buttonPanel.add(ok);
  20. buttonPanel.add(Box.createGlue());
  21. buttonPanel.add(cancel);
  22. buttonPanel.add(Box.createGlue());
  23. content.add(buttonPanel, "South" );
  24. dialog.pack();
  25. dialog.setLocationRelativeTo(view);
  26. dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
  27. dialog.setVisible(true);
  28. ok.addActionListener(this);
  29. cancel.addActionListener(this);


 
J'ai tout virré, sauf le Jpanel et les deux boutons.
 
Si maintenant j'ajoute ça :
 

Code :
  1. void actionPerformed(e)
  2. {
  3. if(e.getSource() != cancel)
  4. {
  5.    dialog.dispose();
  6. }
  7. // dialog.dispose();
  8. }


 
Le bouton cancel est inactif.
 
Si à la place j'ai ça :
 

Code :
  1. void actionPerformed(e)
  2. {
  3. if(e.getSource() != cancel)
  4. {
  5.   //  dialog.dispose();
  6. }
  7. dialog.dispose();
  8. }


 
C'est le bouton OK qui devient inactif
 
 
Donc le test est bon.
 
MAIS, si je mets n'importe quoi avant le dialog.dispose(); comme ça par exemple :
 

Code :
  1. void actionPerformed(e)
  2. {
  3. if(e.getSource() != cancel)
  4. {
  5.   textArea.setSelectedText("salut !" );
  6. }
  7. String test="machin";
  8. dialog.dispose();
  9. }


 
Le bouton Ok n'a plus d'effet. Je veux dire par là qui s'allume si je vais dessus et que je clique dessus. Mais le Jpanel ne se ferme plus...  :heink:  
 
Je sens que si j'arrive à comprendre ça, le reste ne devrait pas me poser de problème...


Message édité par Hermes le Messager le 27-10-2003 à 20:18:42
n°551896
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 20:20:09  profilanswer
 

Je suis en train d'éditer le message.
 
textArea.setSelectedText("salut !" ) marche, y compris au sein d'un void, mais le problème, c'est que dès que je le mets là où je l'ai mis, il ne marche plus.
 
sniff...

n°551899
the real m​oins moins
Posté le 27-10-2003 à 20:21:27  profilanswer
 

the real moins moins a écrit :

http://www.jedit.org/42docs/api/or [...] ng.String)
 
Replaces the selection at the caret with the specified text. If there is no selection at the caret, the text is inserted at the caret position.
 
vérifie la position du "caret" :o
 


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°551903
nraynaud
lol
Posté le 27-10-2003 à 20:23:12  profilanswer
 

tu déclares ta variable "test" dans ta classe et non dans ta méthode et elle sera accessible plus tard dans ton instance ?

n°551909
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 20:29:00  profilanswer
 

nraynaud a écrit :

tu déclares ta variable "test" dans ta classe et non dans ta méthode et elle sera accessible plus tard dans ton instance ?


 
En fait, cette variable était à un moment donné une tentative de récupération du actionPerformed.
 
Pourquoi ?
 
Pour ça :
 
 

Code :
  1. textArea.setSelectedText("Salut" );

tout seul marche.
 

Code :
  1. void delire()
  2. {
  3. textArea.setSelectedText("Salut" );
  4. }
  5. delire();


 
marche aussi
 
Mais  
 

Code :
  1. void actionPerformed(ActionEvent e)
  2. {
  3. if(e.getSource() == this.ok)
  4. {
  5.   textArea.setSelectedText("Salut" );
  6. }
  7. else
  8. {
  9. dialog.dispose();
  10. }
  11. }


 
ne marche pas ALORS QUE si je joue avec dialog.dispose, je testes effectivement que je peux voir si OK ou Cancel ont été cliqué.
 
 :cry:  
 

n°551911
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 20:30:20  profilanswer
 

La preuve :
 
 
Code :
 
 

Code :
  1. void actionPerformed(e)
  2.   {
  3.      if(e.getSource() != cancel)
  4.      {
  5.          dialog.dispose();
  6.      }
  7.      // dialog.dispose();
  8.   }

 
 
 
Le bouton cancel est inactif.
 
Si à la place j'ai ça :
 
 
Code :
 
 

Code :
  1. void actionPerformed(e)
  2.   {
  3.      if(e.getSource() != cancel)
  4.      {
  5.         //  dialog.dispose();
  6.      }
  7.      dialog.dispose();
  8.   }

 
 
 
C'est le bouton OK qui devient inactif
 
 
Donc le test est bon.

n°551960
Hermes le ​Messager
Breton Quiétiste
Posté le 27-10-2003 à 20:53:59  profilanswer
 

PUTAIN !!!!!!!!!! J'ai trouvé, c'est un problème interne à jEdit.
 
Il faut faire une MACRO et l'appeler depuis le Xinsert, et le bug disparait !!!!!
 
Je peux continuer à bosser maintenant... pfffff !!

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Probleme avec Jpanel

 

Sujets relatifs
api mysql c et c++ : problème de std::string[C++] Je débute : problème de math
big problème de retour à la ligneProblème de %5C
[php] problème de logiqueProblème dans une requête SQL
Probleme de Session en Asp (PWS)[urgent] probleme avec VBA sous excel 98: Trouver la derniere ligne
problème avec une requête LIKE[JAVA] Probleme pour 'adder' des JComponent dnas mon JPanel..
Plus de sujets relatifs à : Probleme avec Jpanel


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR