我想要一个添加ToolTip到自定义MapMarker的JMapViewer。但是,取消搜索并不能帮助我解决这个问题。
自定义MapMarker为:
public class MapMarkerUnit extends MapObjectImpl implements MapMarker
Run Code Online (Sandbox Code Playgroud)
绘制方法的覆盖是
public void paint(Graphics g, Point position, int radio) {
String filename = "marker.png";
//System.out.print(filename);
BufferedImage x = null;
try {
x = ImageIO.read(getClass().getResource(filename));
} catch (IOException ex) {
Logger.getLogger(MapMarkerUnit.class.getName()).log(Level.SEVERE, null, ex);
}
g.drawImage(x, position.x-16, position.y-37,null);
//if(getLayer()==null||getLayer().isVisibleTexts()) paintText(g, new Point(position.x+20,position.y));
}
Run Code Online (Sandbox Code Playgroud)
感谢您提供的任何帮助。
覆盖的getToolTipText()方法JMapViewer。在您的实现中,用于getPosition()将MouseEvent坐标转换为大地坐标。下面的示例仅显示未格式化的坐标。您需要找到最接近MapMarker的文本并返回适当的文本。
JMapViewer map = new JMapViewer() {
@Override
public String getToolTipText(MouseEvent e) {
Coordinate c = getPosition(e.getX(), e.getY());
return c.getLat() + " " + c.getLon();
}
};
map.setToolTipText(""); // initialize
Run Code Online (Sandbox Code Playgroud)
附录:是否可以将工具提示直接添加到图像?
没有; JMapViewer是JComponent处理工具提示的外壳。
我在地图上大约有50个标记……这是很多迭代的结果。
您肯定无法在MapMarker实现中加载图像;使用SWingWorker加载的图像的背景下,对于例如。
作为一个具体的迭代示例,JFreeChart以这种方式轻松地处理了数十个实体的工具提示。这是封闭面板的getToolTipText()实现,这是调用的循环Shape#contains()。此处显示了一个简化的示例,说明了该方法。