JPopupMenu positioning



JPopupMenu positioning

I have a button, which, when clicked, should show a popup menu alignd
with its lower right corner.

The issue is that the popup menu shows in a wrong place with the first
click on the button, and in the correct one on every subsequent click,
even when moving or resizing the window.

source to display the problem:
-snip-
public class NewJFrame extends javax.swing.JFrame {

/** Creates new form NewJFrame */
public NewJFrame() {
initComponents();
}

private void initComponents() {

jPopupMenu1 = new javax.swing.JPopupMenu();
jMenuItem1 = new javax.swing.JMenuItem();
jMenuItem2 = new javax.swing.JMenuItem();
jButton1 = new javax.swing.JButton();

jMenuItem1.setText("Item 1");
jPopupMenu1.add(jMenuItem1);

jMenuItem2.setText("Item 2");
jPopupMenu1.add(jMenuItem2);

setDefaultCloseOperation(javax.swing.WindowConstants
.EXIT_ON_CLOSE);

jButton1.setText("jButton1");
jButton1.addActionListener(new
java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent
evt) {
jButton1ActionPerformed(evt);
}
});

javax.swing.GroupLayout layout = new
javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax
.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment
.TRAILING, layout.createSequentialGroup()
.addContainerGap(206, Short.MAX_VALUE)
.addComponent(jButton1)
.addContainerGap())
);
layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jButton1)
.addContainerGap(219, Short.MAX_VALUE))
);

pack();
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent
evt) {
// show the popupmenu
jPopupMenu1.show(jButton1, jButton1.getWidth() -
jPopupMenu1.getWidth(),
jButton1.getHeight());
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
}

private javax.swing.JButton jButton1;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JMenuItem jMenuItem2;
private javax.swing.JPopupMenu jPopupMenu1;
}
-snip-

Any way to make it behave the way I want to (show up in the correct
place on the first try)? I have tried

JFrame.invalidate()
JFrame.validate()
JFrame.pack()

JPopupMenu.invalidate()
JPopupMenu.validate()
JPopupMenu.pack()

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().

Thanks again.
--
Sabine Dinis Blochberger

Op3racional
www.op3racional.eu
.