[JAVA] PopupMenu sur un TextArea : cacher le popup windows

PopupMenu sur un TextArea : cacher le popup windows [JAVA] - Java - Programmation

Marsh Posté le 09-10-2003 à 12:05:53    

J'ai un PopupMenu qui réagit au click droit dans un TextArea. Tout fonctionne bien, l'utilisateur peut faire son choix, lorsque le popupMenu disparait, le popup standard Windows apparait (Copier, Coller, Couper).
Qqn sait-il comment ne pas montrer ce popup ?


---------------
http://runnerstats.net
Reply

Marsh Posté le 09-10-2003 à 12:05:53   

Reply

Marsh Posté le 09-10-2003 à 12:31:32    

:ouch: C'est quoi ton OS / JVM ?


---------------
Light is right
Reply

Marsh Posté le 09-10-2003 à 12:48:28    

c'est dans quel contexte? une appli ou une applet?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 09-10-2003 à 13:58:19    

:heink: spa normal ça !!
 
enterre ton PC avec des gousses d'ail avant qu'il ne soit trop tard


Message édité par bobuse le 09-10-2003 à 13:58:28
Reply

Marsh Posté le 09-10-2003 à 14:14:28    

Nerisson a écrit :

:ouch: C'est quoi ton OS / JVM ?

windows 98
J2SDK 1.4.1
mais ça le fait avec d'autres combinaisons de windows/JVM


---------------
http://runnerstats.net
Reply

Marsh Posté le 09-10-2003 à 14:15:15    

the real moins moins a écrit :

c'est dans quel contexte? une appli ou une applet?

en appli
je vais tester pour voir si çale fait aussi en applet


---------------
http://runnerstats.net
Reply

Marsh Posté le 09-10-2003 à 14:20:14    

si c'était en applet on pourrait tester aussi ;)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 09-10-2003 à 14:27:09    

the real moins moins a écrit :

si c'était en applet on pourrait tester aussi ;)

je poste un exemple ce soir (avec le code) :jap:


---------------
http://runnerstats.net
Reply

Marsh Posté le 09-10-2003 à 14:28:22    

ok :)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 09-10-2003 à 22:38:26    

Bon, j'ai dépouillé ma classe de ces atours, et l'ai mise sous forme d'applet :
http://charlene25.free.fr/test/
Cliquez droit dans le textarea, choisissez u item, et admirez le joli popup windows qui s'affiche  :cry:  
 
 
Le code :
 

Code :
  1. public class Test extends Applet implements MouseListener {
  2.  TextArea text;
  3.  PopupMenu pop;
  4.  public Test() {
  5.  pop = new PopupMenu();
  6.  pop.add("Item 1" );
  7.  pop.add("Item 2" );
  8.  pop.add("Item 3" );
  9.  text = new TextArea(10,10);
  10.  text.setText("Cliquez droit pour voir le popup" );
  11.  text.addMouseListener(this);
  12.  text.add(pop);
  13.  add(text);
  14.  //pack();
  15.  }
  16. // Méthodes implémentant l'interface MouseListener
  17. public void mouseClicked(MouseEvent e) {}
  18.      public void mousePressed(MouseEvent e) {}
  19.      // en affichant le popup sur l'evt mouseReleased, on évite de mauvaises surprises liées au WM
  20.      public void mouseReleased(MouseEvent e) {   
  21.          int modifiers = e.getModifiers();
  22.          // le popup se déroule sur un right click, ou un click+control par exemple
  23.          if( e.isPopupTrigger() ) {
  24.               pop.show(text,e.getX(),e.getY());
  25.          }
  26.      }
  27.      public void mouseEntered(MouseEvent e) {}
  28.      public void mouseExited(MouseEvent e) {}
  29. public void init() {
  30.  Test t = new Test();
  31. }
  32. }


Message édité par noldor le 09-10-2003 à 22:42:32
Reply

Marsh Posté le 09-10-2003 à 22:38:26   

Reply

Marsh Posté le 09-10-2003 à 22:39:51    

je v voir :)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 09-10-2003 à 22:40:02    

ha tiens j'ai pas le plugin ici :whistle:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 10-10-2003 à 09:03:31    

the real moins moins a écrit :

ha tiens j'ai pas le plugin ici :whistle:


je confirme, meme avec moz' [:wam]

Reply

Marsh Posté le 10-10-2003 à 10:18:28    

lorill a écrit :


je confirme, meme avec moz' [:wam]


 
Avec Moz 1.4, j'ai le plugin (Java Plug-in 1.4.1_02 for Netscape Navigator (DLL Helper))
Et, en effet, quand j'fais bouton droit, j'ai ton menu, et dès qu'il disparait, celui de windows apparait!
 
EDIT: d'ailleurs c'est même vachement curieux, parce que, en principe, dans Mozilla, le menu contextuel de windows n'est pas censé sortir. Quand on fait "bouton droit" dans Mozilla, normalement, c un menu contextuel propore à Mozilla qui doit tomber. Là, c'est bel et bien celui de Windows, j'reconnais le style (et le contenu). Dingue ça ! :pt1cable:


Message édité par El_gringo le 10-10-2003 à 10:22:38
Reply

Marsh Posté le 10-10-2003 à 11:03:23    

El_gringo a écrit :


 
Avec Moz 1.4, j'ai le plugin (Java Plug-in 1.4.1_02 for Netscape Navigator (DLL Helper))
Et, en effet, quand j'fais bouton droit, j'ai ton menu, et dès qu'il disparait, celui de windows apparait!
 
EDIT: d'ailleurs c'est même vachement curieux, parce que, en principe, dans Mozilla, le menu contextuel de windows n'est pas censé sortir. Quand on fait "bouton droit" dans Mozilla, normalement, c un menu contextuel propore à Mozilla qui doit tomber. Là, c'est bel et bien celui de Windows, j'reconnais le style (et le contenu). Dingue ça ! :pt1cable:  


merci de ta confirmation :jap:


---------------
http://runnerstats.net
Reply

Marsh Posté le 10-10-2003 à 11:29:50    

j'ai essayé sous nux avec l'appletviewer (pas de plugins java :( ), et aucun popup !!
sinon, je pense que ce doit etre une special feature de la jvm sous windows qui crée un composant text windows ... :??: strange kan meme ...

Reply

Marsh Posté le 10-10-2003 à 11:50:28    

bobuse a écrit :

je pense que ce doit etre une special feature de la jvm sous windows qui crée un composant text windows ... :??: strange kan meme ...


 
Exact. Avec Spy++ (outil fourni avec VC++), En fait l'outil permet de connaitre tt sorte d'infos sur toute les "fenêtres" sous windows. j'ai trouvé la fenêtre de mozilla affichant la page avec l'applet en question, et entant que fenêtre fille, des trucs Java genre SunAwtCanvas, et à la fin de la hérarchie, un petit RICHEDIT. En inspectant les messages windows de clique reçus par cette fenêtre, on constate qu'en cas de clic droit, effectivement, après avoir fait un chois de le menu "Java", la fenêtre recoit bel et bien un WM_LBUTTONDOWN suivi d'un WM_LBUTTONUP. Soit un clic droit au sens Windows.
La seule solution que je vois, c'est passer par JNI (code C appelé depuis Java) pour intercepter les WM_LBUTTONDOWN et WM_LBUTTONUP que la fenêtre peut recevoir. J'éspère pour toi qu'il y a plus simple ! :D

Reply

Marsh Posté le 10-10-2003 à 12:00:41    

El_gringo a écrit :


 
Exact. Avec Spy++ (outil fourni avec VC++), En fait l'outil permet de connaitre tt sorte d'infos sur toute les "fenêtres" sous windows. j'ai trouvé la fenêtre de mozilla affichant la page avec l'applet en question, et entant que fenêtre fille, des trucs Java genre SunAwtCanvas, et à la fin de la hérarchie, un petit RICHEDIT. En inspectant les messages windows de clique reçus par cette fenêtre, on constate qu'en cas de clic droit, effectivement, après avoir fait un chois de le menu "Java", la fenêtre recoit bel et bien un WM_LBUTTONDOWN suivi d'un WM_LBUTTONUP. Soit un clic droit au sens Windows.
La seule solution que je vois, c'est passer par JNI (code C appelé depuis Java) pour intercepter les WM_LBUTTONDOWN et WM_LBUTTONUP que la fenêtre peut recevoir. J'éspère pour toi qu'il y a plus simple ! :D


c'est pas qqch que je pourrais intercepter en Java ? (j'imagine que non)


---------------
http://runnerstats.net
Reply

Marsh Posté le 10-10-2003 à 12:07:59    

noldor a écrit :


c'est pas qqch que je pourrais intercepter en Java ? (j'imagine que non)


 
J'imagine aussi que non!
Par contre, on voit que la JVM recoit le message et ensuite il est transmis à windows (le menu de windows n'apparait pas tant que le tiens n'est pas validé). Peut être y a t'il un moyen de ne pas trasmettre le message... Si c'est le cas, je n'le connais pas.

Reply

Marsh Posté le 10-10-2003 à 13:01:23    

C'est bien du swing ton code hein ? pas du SWT ?

Reply

Marsh Posté le 10-10-2003 à 13:10:58    

(mon plugin à la maison, c'est parce que j'ai viré ma jdk pour raisons de place :whistle:)
 
 
ici, j'ai le plugin, par contre j'ai aucun popup :D
(linux, firebird)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 10-10-2003 à 13:57:47    

R3g a écrit :

C'est bien du swing ton code hein ? pas du SWT ?


 
C'est du AWT.
Et c'est vrai qu'avec du Swing, le problème ne se produira plus : AWT utilise des composants natifs...
 
EDIT : Avec un JTextArea à la place tu TextArea, ça devrait êter mieux!


Message édité par El_gringo le 10-10-2003 à 13:58:36
Reply

Marsh Posté le 10-10-2003 à 13:59:38    

the real moins moins a écrit :

(mon plugin à la maison, c'est parce que j'ai viré ma jdk pour raisons de place :whistle:)
ici, j'ai le plugin, par contre j'ai aucun popup :D
(linux, firebird)


 
Normal. c'est qui fait qu'un menu contextuel sort sous windows, c'est du son composant (TextArea) est un composant windows natif. Pas étonnant que ce soit différent sous linux.

Reply

Marsh Posté le 10-10-2003 à 14:58:04    

El_gringo a écrit :

AWT utilise des composants natifs...


 :heink:

Reply

Marsh Posté le 10-10-2003 à 15:12:14    

ben ca peux apporté un element de reponse:
 
le popup s'affiche par defaut sur les composants text en AWT,pas besoin de crée le popup menu donc et l'evenement est géré par l'OS...
d'un coté ca facilite le developpement mais dans ton cas ca fou le bordel...
regarde le code de textArea et essaye de surcharger la methode qui appel le popup pour voir

Reply

Marsh Posté le 10-10-2003 à 15:25:14    

veryfree a écrit :

ben ca peux apporté un element de reponse:


sauf qu'il me semble qu'awt n'utilise pas de widgets natifs... sinon, quel est l'interet de swt ?

Reply

Marsh Posté le 10-10-2003 à 15:26:46    

El_gringo a écrit :


 
Normal. c'est qui fait qu'un menu contextuel sort sous windows, c'est du son composant (TextArea) est un composant windows natif. Pas étonnant que ce soit différent sous linux.

non je veux dire que j'ai pas NON PLUS le popup qu'on est supposé avoir.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 10-10-2003 à 15:27:49    


J'ai dit une connerie !? si c'est le cas, désolé.
En tout cas je maintiens que le TextArea qui est dans son applet est un contrôle RICHEDIT, au même titre que le CRichEdit des MFC (au niveau de la classe de fenêtre). Et qu'il reçoit les mêmes messages systèmes (WM_LBUTTONUP et autes...)

Reply

Marsh Posté le 10-10-2003 à 15:28:38    

lorill a écrit :


sauf qu'il me semble qu'awt n'utilise pas de widgets natifs... sinon, quel est l'interet de swt ?


AWT utilise des lib natives a l'OS, c'est d'ailleurs ce qui a justifié la creation de swing: des composants IDENTIQUE quelque soit l'OS et c'est le cas...


Message édité par veryfree le 10-10-2003 à 15:30:43
Reply

Marsh Posté le 10-10-2003 à 15:29:27    

lorill a écrit :


sauf qu'il me semble qu'awt n'utilise pas de widgets natifs... sinon, quel est l'interet de swt ?


 
SWT, j'connais pas. C quoi ? Une implémentation d'interface qui utilise les compostants natifs des systèmes ?

Reply

Marsh Posté le 10-10-2003 à 15:31:20    

y'a taiche qui va encore débarquer :pfff:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 10-10-2003 à 15:57:25    

merci à tous pour vos réponses
Pour des raisons de compatibilité, je suis obligé de rester en 1.1 donc pas de Swing. Je vais voir si je peux empêcher l'évt d'être généré
:jap:

Reply

Marsh Posté le 09-03-2004 à 14:23:31    

je uppe


---------------
http://runnerstats.net
Reply

Marsh Posté le 09-03-2004 à 14:37:36    

je viens de trouver la solution : dans la méthode mouseReleased(MouseEvent e), en consommant l'événement par un e.consume() le menu contextuel n'apparait plus
Je suis trop content !!


---------------
http://runnerstats.net
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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