Ich habe Probleme, JPopupMenu
's Position zu bekommen.JPopupMenus Position erhalten
Was ich brauche, ist in der Lage sein, einige
Menüpunkt nach rechts klicken Sie auf den Arbeitsbereich, und klicken Sie dann ein Element erstellen anstelle direkt unter der Position des zuvor angezeigten Menü.
Ich habe versucht, die Position des Menüs selbst immer und seine Einzelteile,
aber es gibt mir konstante Werte um 0 (Kommentare im Code sehen)
Wegen Trennung von Bedenken wird das Menü in einer Klasse
angezeigt, während seine Aktionen in einem anderen behandelt werden.
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());
}
}
}
Ich weiß, dass ich die bekannt letzte Position in PopupMouseListener
, und von MainFrameMenu lesen speichern könnte, aber es würde die Klassen Hierarchie (die meisten anderen Vorkommen von PopupMouseListener
don ruinieren‘ t brauche es).
Natürlich! Die Mausposition !!! Es funktioniert, danke! - (BTW, getParent(). GetLocation() gibt auch Konstanten zurück.) –