
Signature
Sabine Dinis Blochberger
Op3racional
www.op3racional.eu
Sabine Dinis Blochberger schrieb:
> JPopupMenu positioning
>
[quoted text clipped - 6 lines]
>
> source to display the problem:
[...]
> private void jButton1ActionPerformed(java.awt.event.ActionEvent
> evt) {
[quoted text clipped - 3 lines]
> jButton1.getHeight());
> }
[...]
I've reproduced your problem. In the debugger I saw:
When the method is called for the first time, jPopupMenu1.getWidth()
returns 0, because the popup (a package-private member variable in
JPopupMenu) is not yet realized.
When it is called the for second/third/... time, jPopupMenu1.getWidth()
returns 20, and all is fine.
> Any way to make it behave the way I want to (show up in the correct
> place on the first try)? I have tried
[...]
> JPopupMenu.pack()
I tried that, too, and didn't succeed.
Looking into JPopupMenu's source code, you see that JPopupMenu.pack() is
essentially a no-op, when JPopupMenu's popup member is not yet realized.
> I also tried to set the popup menus on screen location directly, but
> never found out how to get the correct point. This might be a possible
> solution, to call jPopupMenu1.setLocation().
I would take a pragmatic route, and decide to display the popup menu
*left*-aligned, instead of *right*-aligned to the button:
private void jButton1ActionPerformed(java.awt.event.ActionEvent
evt) {
// show the popupmenu
jPopupMenu1.show(jButton1, 0, jButton1.getHeight());
}
I know this is not quite what wanted, but at least it behaves consistently.

Signature
Thomas
Sabine Dinis Blochberger - 23 Jan 2008 12:47 GMT
> Sabine Dinis Blochberger schrieb:
> [...]
> I've reproduced your problem. In the debugger I saw:
[quoted text clipped - 3 lines]
> When it is called the for second/third/... time, jPopupMenu1.getWidth()
> returns 20, and all is fine.
That is a great insight!
I have tried figuring out the location for the menu after the call to
show (using setLocation()), but was having problem determining the Point
(on screen, or in relation to the frame). I suspect SwingUtilities might
help with the conversion of coordinate spaces.
> > I also tried to set the popup menus on screen location directly, but
> > never found out how to get the correct point. This might be a possible
[quoted text clipped - 7 lines]
> }
> I know this is not quite what wanted, but at least it behaves consistently.
Yes, that is what I will put inplace now, until I get more time to
fiddle, which is probably never <g>.
Thank you very much for your time, Thomas.

Signature
Sabine Dinis Blochberger
Op3racional
www.op3racional.eu