probleme avec JPopupMenu

probleme avec JPopupMenu - Java - Programmation

Marsh Posté le 31-03-2003 à 21:22:31    


voila mon probleme: lorsque je clic droit avec la souris dans mon appli java un popupmenu apparait le probleme c'est que lorsque je suis trop bas ds l ecran, celui au lieu de "s'adapter" et de  s afficher vers le haut de facon a etre totalement visible continu de s afficher en bas
ce qui fait qu on ne vois qu une partie du menu ce qui embetant;meme probleme lorsqu on est trop a droite de l ecran :/
 
vous savez comment faire pour regler ce probleme?

Reply

Marsh Posté le 31-03-2003 à 21:22:31   

Reply

Marsh Posté le 31-03-2003 à 21:37:02    

C'est bizarre, je viens d'essayer avec un JMenu et un JToolTip (J'avais que ca sous la main) et il s'adapte bien :/


---------------
get amaroK plugin
Reply

Marsh Posté le 31-03-2003 à 22:14:44    

bobuse a écrit :

C'est bizarre, je viens d'essayer avec un JMenu et un JToolTip (J'avais que ca sous la main) et il s'adapte bien :/


 
c un jpopupmenu hein :)
 
bon ben maintenant ca marche je balance le code ca peux tj servir a quelqu un:
 

Code :
  1. public void processMouseEvent(MouseEvent mouseevent)
  2.     {
  3.         if(mouseevent.isPopupTrigger())
  4.         {
  5.        
  6.   int x = mouseevent.getX();
  7.   int y = mouseevent.getY();
  8.   Point location = getLocationOnScreen();
  9.   popupSize  = popup.getSize();
  10.   double diffx=screenDimension.getWidth() - (location.x + x )- popupSize.width;
  11.                 double diffy=screenDimension.getHeight() - (location.y + y ) - popupSize.height;
  12.        
  13.         if (diffx<0)
  14.         {
  15.           x -= popupSize.width;
  16.         }
  17.         if (diffy<0)
  18.         {
  19.           y -= popupSize.height;
  20.         }
  21.          popup.show(this, x , y);
  22.         }
  23.         else
  24.         {
  25.             super.processMouseEvent(mouseevent);
  26.         }
  27.     }


Message édité par veryfree le 31-03-2003 à 22:43:57
Reply

Marsh Posté le 09-07-2003 à 13:43:33    

voila un truc que j ai trouver :
 
http://faqjava.developpez.com/?pag [...] hors_ecran
 

Lorsque l'on utilise la méthode show(java.awt.Component, int, int) pour afficher un javax.swing.JPopupMenu, les coordonnées correspondent au coin haut-gauche du menu. Si ces coordonnées sont trop près du bord de l'écran, une partie du menu est alors cachée. Nous allons donc surcharger la méthode show() pour que les coordonnées soient corrigées si le message est trop proche du bord de l'écran.


Code :
  1. class MonPopupMenu extends JPopupMenu {
  2.         public void show(Component invoker, int x, int y) {
  3.                 /* Dimension de l'écran */
  4.                 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  5.                 /* Dimension du Menu popup */
  6.                 Dimension popupSize = this.getPreferredSize();
  7.                 /* Position en x,y du popup à l'écran (pour le .show) */
  8.                 double xPopupEcran = invoker.getLocationOnScreen().getX() + x;
  9.                 double yPopupEcran = invoker.getLocationOnScreen().getY() + y;
  10.                
  11.                 /* Si le popup déborde de l'écran sur la droite on décale sur x */
  12.                 if ((xPopupEcran + popupSize.getWidth()) > screenSize.getWidth()) {
  13.                         x = x - (int)popupSize.getWidth();
  14.                 }
  15.                
  16.                 /* Si le popup déborde de l'écran sur le bas on décale sur y */
  17.                 if ((yPopupEcran + popupSize.getHeight()) > screenSize.getHeight()) {
  18.                         y = y - (int)popupSize.getHeight();
  19.                 }
  20.                
  21.                 /* On affiche le popup à l'endroit judicieusement calculé :) */
  22.                 super.show(invoker, x, y);
  23.         }
  24. }

 
 
 
Ce bug a été résolu dans la version 1.4 de l'API. Le correctif n'est pas nécessaire.

Reply

Sujets relatifs:

Leave a Replay

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