popup menu goes out over screen size

I have a popup menu in my java application that parts of the menu goes out of view on the bottom and right side of the screen. is there any way to have the menu pop up insead of down and left instead of right in these cases?
greg_100Asked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
objectsConnect With a Mentor Commented:
you need to convert the mouse coords:

 Point mouse = evt.getPoint();
 SwingUtilities.convertPointToScreen(mouse, evt.getComponent());

and use that in your checks
0
 
objectsCommented:
> is there any way to have the menu pop up insead of down and left instead of right in these cases?

you control the location it pops up, so yes :)
when you pop it up, check the screen dimensions, and the popup menu size and use that to decide the location to popup.
eg. to make it popup to the left, shift the mouse click position left by the width of the popup to get the popup location.
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
grim_toasterCommented:
The cleanest way to do this is to sub-class Java's implementation of JPopupMenu with your own custom class that overrides the show method.  This will prevent the rest of your code having to worry about any of this.  Here's a small sample to get you started, I won't provide the full listing, as there wouldn't be much fun in it for you!

    public void show(Component invoker, int x, int y) {
        if (invoker != null) {
            Point pt = invoker.getLocationOnScreen();
            Dimension preferredSize = getPreferredSize();
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
     
            // other code to work out new positions for x and y if go outside screen...
       }

       super.show(invoker, x, y);
    }

There are a couple of problems with this though, mainly that it doesn't cater for the Windows toolbar, although there may be a way to cater for this in releases later than 1.3.1, but I seem to be the only one still stuck at that version :(.  But it will still be better than not having anything at all.



0
 
grim_toasterCommented:
Or if you are having dificulties with proper drop-down menues, then create a custom implementation of JMenu...
0
 
greg_100Author Commented:
My calculations so far are:

Get screen size, Get Mouse Location, get Menu size. convert screen size to pixels.

I check to see if mouse location + menu width is > screen size and translate the popup.

I also check to see if the mouse location + menu height is > screen size and translate the popup.

But this is not working correctly. am I missing something or calculating something wrong?
0
 
objectsCommented:
possibly an error in your calcs, how exactly is it not working?
0
 
greg_100Author Commented:
When I click to bring up the popup menu near the right side or bottom of the screen I only see part of the menu as the other part is off the screen.
0
 
grim_toasterCommented:
Could you provide the code that you are using, then we may be able to help you some more...
0
 
greg_100Author Commented:
// get menu size
      Dimension menuSize = _popupMenu.getPreferredSize();

      //get the location of the Mouse
      Point absolutePosition = new Point();
      SwingUtilities.convertPointToScreen(absolutePosition, evt.getComponent());

      //get screen size
      Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

      // get menu location
      Point menuLocation = evt.getPoint();

      // check width
      if(absolutePosition.x + menuSize.width > screenSize.width){

        // adjust width
        menuLocation.translate(-menuSize.width,0);

      } //if

      // check height
      if(absolutePosition.y + menuSize.height > screenSize.height){

        // adjust height
        menuLocation.translate(0,-menuSize.height);

      }  //if

      _popupMenu.show(this, menuLocation.x, menuLocation.y);

      return;
      
0
All Courses

From novice to tech pro — start learning today.