JPopupMenu
の位置はです。私は必要なものJPopupMenuの位置を取得する
は、作業領域で右クリックいくつかの
メニュー項目をクリックし、右の前に表示されるメニューの位置を下で行わに要素を作成できるようにすることです。
私は、メニュー自体の、そのアイテムの位置を取得しようとした
が、それはそのための懸念の分離の私に定数値 0付近(コード内のコメントを参照してください)
を与えるメニューは1つのクラス
に表示され、そのアクションは別のクラスで処理されます。
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());
}
}
}
私は 、PopupMouseListener
に最後の既知の位置を保存し、MainFrameMenuからそれを読むことができる知っているが、それはクラス 階層PopupMouseListener
ドン」は(他のほとんどの出現を台無しにそれが必要です)。
もちろん!マウスの位置!!!それは動作します、ありがとう! - (BTW、getParent()。getLocation()も定数を返します。) –