用swing开发的地图导航和圆角Tooltip

    xiaozhonghua同学用TWaver实现了一个地图导航的控件,看了灰常喜欢,TWaver俺是买不起,就想自己用swing来实现一个玩玩,当然,和TWaver强大的功能是不能比,那可是号称10W个节点10秒就加载的,咱就喜欢它那个漂亮的样式,就画画界面。
    首先是可以加载背景地图,这个好办,用个bufferimage就可以了,然后是放大缩小移动,这里用了点心思,开始想的时候是根据缩放比例对bufferimage作整体缩放,然后根据JPanel的视图大小作块截取。后来发现,当图片比较大的时候,不断放大的化最终会内存溢出,咱就想了另外一个办法,底图大小不变,缩放实际上就是图片截取区域变化的过程。 放大:截取区域变小 缩小:截取区域变大,然后在放置到JPanel的视图上,不就OK了。其他的自适应屏幕等等的处理都是这样的。
    接着就是在背景图上放置热点,这里我对热点作了图层的分类,这也是仿照GIS的方式。每组热点可以有自己不同的渲染器,渲染器是可以自己扩展的。热点选中之后,我将原始的mouseClick事件作了封装,转成自定义的事件,这样就将选中的热点对象通过事件对象发布出去,方便使用者的调用。
    最后是那个好看的圆角tooltip,我的思路是用JLayerPanel,底层是负责绘制圆角的JPanel,然后上面是客户端传递过来的contextPanel,我负责将两者结合在一起,处理好定位问题,然后该透明的透明,就形成了一个圆角tooltip。还是那句话,swing只有你想不到的,没有你做不到的。需要注意的是,要根据热点的位置,tooltip的样式和定位是不同的,比如在右边界的热点,tooltip就要在热点的左边,这个同学们可以自己用用看。
    老规矩,代码继续公布,将map包替换我前面发布的项目中的map包就可以了。注意要先选择地图上面的工具栏才能选点,和GIS的操作方式类似。还有一些功能没有完善,比如拖动热点时,tooptip没有跟着移动,我后面会不断的完善的。

用swing开发的地图导航和圆角Tooltip_第1张图片

用swing开发的地图导航和圆角Tooltip_第2张图片

你可能感兴趣的:(swing)