大屏中支持添加自定义面板,用户可通过二次开发的方式,自定义面板功能,满足用户不同场景的应用需求。
下文将以自定义树控件为例,介绍如定制开发树控件,且单击树节点时,地图同步定位显示对应的区域。实现流程如下:
主要操作说明
1.定制开发实现树控件面板
(1)、继承DAbstactCustomPanel基类,基于封装好的模板构建自定义树控件在大屏中的面板。
public class DCustomTreePanel extends DAbstractCustomPanel
(2)、注册自定义树控件类型至下拉选项中,以供选择。注册后 属性 面板 自定义类型 下拉选项中,可选择 树控件 类型,如下图所示:
DashboardManger.getInstance().addCustomType(actionTreeType);
3、根据树控件属性中的文本结构构建树,把每一行解析为一个树节点,行首的空格将解析为树的层级关系,例如:第二行B的行首较第一行A缩进一个空格,解析为树节点后,B为A的子节点。构建树节点的核心代码如下:
final DefaultMutableTreeNode currentNode = new ScaleNode(s.trim());
final int nodeLevel = getNodeLevel(s);
if (nodeLevel == -1) {
continue;
}
if (nodeLevel == 0) {
root.add(currentNode);
} else {
getBeforeNode(root, nodes, nodeLevel).add(currentNode);
}
insertChildNode(currentNode, nodes, nodeLevel);
4、 响应树节点的选中事件,选中树节点时,根据树节点属性中指定的比例尺(scale)和地图范围(bounds),改变地图显示范围,实现地图定位。核心代码如下:
DesktopMapControl mapControl = ((DMapPanel) ((FormDashboard) getFormDashboard()).getPanelGrid().getParameters(DParameterType.MAP).get(0)).getMapControl();
mapControl.getMap().setScale(scaleNode.scale);
mapControl.getMap().setViewBounds(scaleNode.bounds);
mapControl.getMap().refresh();
2. 配置战区城市地图范围
在大屏中添加自定义面板,控件类型设置为 树控件 ,在 自定义控件属性中设置树控件的层级、名称、地图比例尺和显示范围,一个格则表示缩进一级,通过scale和bounds属性来设置地图的比例尺和显示范围。设置方式如下:
3. 预览大屏
预览大屏,在自定义的树控件中选中不同城市,切换地图至指定的范围,切换下过如下图: