Tengo problemas para obtener JPopupMenu
en la posición.Obteniendo la posición de JPopupMenu
Lo que necesito es ser capaz de hacer clic derecho sobre el área de trabajo, haga clic en alguna
elemento de menú, y luego crear un elemento en su lugar justo debajo de la posición del menú que se muestra anteriormente.
he intentado conseguir la posición del menú en sí y de sus elementos,
pero me da valores constantes alrededor de 0. (ver comentarios en el código)
Debido a separación de las preocupaciones , el menú se muestra en una clase
mientras sus acciones se manejan en otra.
public final class MainFrameMenu
extends JPopupMenu
implements ActionListener {
private final MainFrame mainFrame;
private final JMenuItem item1 = new JMenuItem("add line");
private final JMenuItem item2 = new JMenuItem("add element");
public MainFrameMenu(MainFrame mainFrame) {
super("Main menu");
this.mainFrame = mainFrame;
item1.addActionListener(this);
item2.addActionListener(this);
add(item1);
add(item2);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == item1) {
System.out.println(getLocation()); // gives ALWAYS [0, 0]
System.out.println(item1.getLocation()); // gives ALWAYS [1, 3]
// I want to create an element IN PLACE
mainFrame.addConnectionLine(getX(), getY());
}
}
}
public final class PopupMouseListener
extends MouseAdapter {
private final JPopupMenu menu;
public PopupMouseListener(JPopupMenu menu) {
this.menu = menu;
}
@Override
public void mousePressed(MouseEvent e) {
popup(e);
}
@Override
public void mouseReleased(MouseEvent e) {
popup(e);
}
private void popup(MouseEvent e) {
if (e.isPopupTrigger()) {
menu.show(e.getComponent(), e.getX(), e.getY());
}
}
}
Sé que podría almacenar el última posición conocido en PopupMouseListener
, y leerlo desde MainFrameMenu, pero arruinaría las clases jerarquía (la mayoría de las otras apariciones de PopupMouseListener
Don' lo necesito).
¡Por supuesto! La posición del mouse !!! Funciona, gracias! - (BTW, getParent(). GetLocation() también devuelve constantes). –