在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 参数,使得左键和中键可以读取到,而右键却不行,所以只好用如此古怪的方法。