在mapxtreme 中visualMapJ1MouseClicked 事件只能便用左鍵,如果想要右鍵彈出信息的話,非常的不方便,下面是一個臨時的解決辦法:
private void visualMapJ1MouseClicked(java.awt.event.MouseEvent evt) {
// TODO 將在此處添加您的處理代碼:
if(evt.getButton() == MouseEvent.BUTTON1){
JPopupMenu pop =new JPopupMenu(); //右鍵菜單
if(!infoToolListener.getInfo().equals("")){ //取回的地理信息不為空
pop.add(infoToolListener.getInfo()); //把信息加到菜單上
pop.show(evt.getComponent(),evt.getX(),evt.getY()); //在鼠標的地方彈出
infoToolListener.clearInfo(); //清除上次信息
}
} else if (evt.getButton() == MouseEvent.BUTTON3){ //如果點的是鼠標右鍵,把它模擬成左鍵
try {
Robot robot = new Robot(); // 建個機器人
robot.mousePress(InputEvent.BUTTON1_MASK); //模擬左鍵按下
robot.mouseRelease(InputEvent.BUTTON1_MASK); //左鍵彈起
} catch (AWTException ex) {
ex.printStackTrace();
}
}
}
我嘗試了很多辦法,因為mapxtreme 中有很多類都是受保護的,在自己的程序中沒法使用,而且,它耦合度非常的高,我曾經想把其中幾個類反編譯過來使用,結果發現,需要反編譯的類越來越多,以至于最后可能要把整個mapxtreme都反編譯過來,所以我放棄了這種想法,只好用模擬實現,另外,MapMouseEvent 繼承了 MouseEvent 但是沒有提供BUTTON 參數,使得左鍵和中鍵可以讀取到,而右鍵卻不行,所以只好用如此古怪的方法。