Ho problemi a trovare la posizione JPopupMenu
.Ottenere la posizione di JPopupMenu
cosa ho bisogno è di essere in grado di fare clic destro sull'area di lavoro, fare clic su alcuni
voce di menu, e quindi creare un elemento in atto proprio sotto la posizione del menu visualizzato in precedenza.
ho cercato di ottenere la posizione del menu stesso e dei suoi elementi,
ma mi dà valori costanti circa 0. (vedi commenti nel codice)
A causa della separazione degli interessi , il menu viene visualizzato in una classe
mentre le sue azioni sono gestite in un'altra.
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());
}
}
}
So che potrei memorizzare l'ultima nota posizione in PopupMouseListener
, e leggerlo da MainFrameMenu, ma sarebbe rovinare le classi gerarchia (la maggior parte delle altre occorrenze PopupMouseListener
don' ne ho bisogno).
Naturalmente! La posizione del mouse !!! Funziona, grazie! - (BTW, getParent(). GetLocation() restituisce anche le costanti.) –