我能夠捕獲兩個鼠標移動的 XY 坐標以及右鍵單擊鼠標打開彈出菜單的位置。問題是如何從彈出菜單頂部獲取與 JFrame 相關的 XY 坐標。彈出窗口起源的 XY 位置與鼠標在彈出窗口上單擊的位置不同。我嘗試將鼠標偵聽器添加到 JPopupMenu 對象,但它從未輸入代碼。MousePopupListener 看起來很有希望,但也沒有幫助。下面的例子實際上是 2 個例子混合在一起的。它應該在鼠標移動時顯示 XY 坐標,以便 XY 在彈出菜單中可見,但圖層不是一個強大的區域,我只能讓鼠標 XY 顯示或彈出菜單工作,但是不是都。無論如何,我想做的是捕獲調用彈出菜單的 XY 坐標(這已經可以完成),但我也想要相對于從彈出菜單中選擇項目時按下鼠標的框架的 XY 位置。需要添加什么來捕獲該信息?
1 回答

江戶川亂折騰
TA貢獻1851條經驗 獲得超5個贊
JPopupMenu 的子組件正在攔截鼠標事件。您需要向菜單及其子菜單添加一個偵聽器。
您可以使用SwingUtilities.convertMouseEvent轉換 MouseEvent 的坐標,使其相對于另一個組件(例如 JFrame):
MouseMotionListener listener = new MouseMotionAdapter() {
? ? @Override
? ? public void mouseMoved(MouseEvent me) {
? ? ? ? me = SwingUtilities.convertMouseEvent(
? ? ? ? ? ? me.getComponent(), me, frame);
? ? ? ? System.out.println("Mouse Move");
? ? ? ? xyMouseLabel.x = me.getX();
? ? ? ? xyMouseLabel.y = me.getY();
? ? ? ? xyMouseLabel.repaint();
? ? }
};
menu.addMouseMotionListener(listener);
for (Component child : menu.getComponents()) {
? ? child.addMouseMotionListener(listener);
}
添加回答
舉報
0/150
提交
取消