赞
踩
作者:nannan
目录
SuperMap iObjects Java是一款强大的地理信息系统(GIS)开发工具包,可以用于构建各种GIS应用程序。本文将介绍如何在IntelliJ IDEA中创建SuperMap的UI界面,并进行相关的开发。需要参考CSDN博客提前部署好环境。SuperMap iObjects Java组件开发——环境部署(IntelliJ IDEA)_nannan^_^的博客-CSDN博客SuperMap iObjects Java 是面向GIS应用系统开发者的组件式GIS开发平台,具有强大的地理数据管理、编辑、显示、分析等功能,并且其具有极强的易用性和丰富的帮助资源,适宜快速开发大型GIS应用系统。本文将介绍如何在IntelliJ IDEA集成开发环境中进行SuperMap iObjects Java组件的环境部署。https://blog.csdn.net/nan620403/article/details/133810990https://blog.csdn.net/nan620403/article/details/133810990
创建一个继承自JFrame
的类,作为顶级容器。
- // 创建 JFrame 窗口
- JFrame frame = new JFrame("SuperMap UI 窗口");
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//表示在关闭窗口时直接退出程序
- frame.setSize(1400, 800);
- frame.setExtendedState(Frame.MAXIMIZED_BOTH);//使 JFrame 窗口在显示时占据整个屏幕的空间,最大化窗口的宽度和高度,以便最大程度地利用可用的显示区域。
设置顶级容器的布局管理器,以控制窗口的位置和大小。创建JSplitPane窗口,将窗口分割成三个区域,左侧分割窗口的顶部加载工作空间管理器,底部加载图层管理器,右侧风格窗口添加存储场景和地图的JTabbedPane选项卡。
- JPanel panel = new JPanel();
- panel.setLayout(new BorderLayout());//是将 JPanel 的布局管理器设置为 BorderLayout,以便使用 BorderLayout 的布局规则来摆放该面板上的组件。
- //创建分割窗格
- JSplitPane jSplitPane = new JSplitPane();//用于创建可拖动的分割窗格,可以将两个组件放置在水平或垂直方向上的分割线两侧。
- jSplitPane.setDividerSize(10);//将设置分割窗格的分割线大小为 10 像素。
- jSplitPane.setDividerLocation(260);// 将设置分割窗格的分割线位置为距离容器起始位置 260 像素的位置。
-
- JSplitPane leftsplitPane = new JSplitPane();//创建左侧分割窗口
- leftsplitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);//表示垂直分割,即将容器分割为上下两部分。
- leftsplitPane.setDividerLocation(250);// 将设置分割窗格的分割线位置为距离容器起始位置 250 像素的位置。
- /*
- 在左侧分割窗口的顶部窗口添加带有标签和线框的panel1,panel1里添加工作空间管理器控件
- */
- JPanel panel1 = new JPanel();
- panel1.setLayout(new BorderLayout());//是将 JPanel 的布局管理器设置为 BorderLayout,以便使用 BorderLayout 的布局规则来摆放该面板上的组件。
- panel1.setBorder(new TitledBorder("工作空间管理器"));
- panel1.add(workspaceTree);
- leftsplitPane.setTopComponent(panel1);//在左侧分割窗口设置顶部组件
-
-
- JTabbedPane jTabbedPane = new JTabbedPane();
- // 将选项卡添加到 JTabbedPane
- jTabbedPane.addTab("地图窗口", mapControl);
- jTabbedPane.addTab("场景窗口", sceneControl);
- jSplitPane.add(jTabbedPane, JSplitPane.RIGHT);//将选项卡容器加到右侧分割面板
-
-
- /*
- 在左侧分割窗口的底部窗口添加带有标签和线框的panel2,panel2里添加图层管理器控件
- */
- JPanel panel2 = new JPanel();
- panel2.setLayout(new BorderLayout());//是将 JPanel 的布局管理器设置为 BorderLayout,以便使用 BorderLayout 的布局规则来摆放该面板上的组件。
- panel2.setBorder(new TitledBorder("图层管理器"));
- panel2.add(layersTree);
-
- leftsplitPane.setBottomComponent(panel2);//在左侧分割窗口设置底部组件
-
- jSplitPane.add(leftsplitPane, JSplitPane.LEFT);//将leftsplitPane分割窗口添加到左侧分割面板

JFrame
窗口 监听JFrame
窗口事件,SceneControl必须在监听窗口事件中打开frame.addWindowListener(new java.awt.event.WindowAdapter(){});
- frame.addWindowListener(new java.awt.event.WindowAdapter() {//监听窗口事件,sceneControl必须有这个监听窗口事件
- public void windowClosing(java.awt.event.WindowEvent e) {
- sceneControl.dispose();
- }
- public void windowOpened(java.awt.event.WindowEvent e) {
-
- openScene();//打开场景
- scenetolayer();//场景窗口与图层管理器联动
- }
- });
监听JTabbedPane选项卡,使地图和场景与图层管理器相关联。若当前窗口为地图窗口,则移除layer3DsTree,添加layersTree,使地图和二维图层树相关联。若当前窗口为场景窗口,则移除layersTree,添加layer3DsTree,使场景和三维图层树相关联。
- jTabbedPane.addChangeListener(new ChangeListener() {//监听选项卡更改事件
- public void stateChanged(ChangeEvent e) {
- // 获取当前选中的选项卡索引
- int selectedIndex = jTabbedPane.getSelectedIndex();
- // 在选项卡被选择时执行你的操作
- if(selectedIndex==0){
- panel2.remove(layer3DsTree);
- panel2.add(layersTree);
- panel2.revalidate();//布局的重新计算
- panel2.repaint();//布局的重绘
- }else{
- panel2.remove(layersTree);
- panel2.add(layer3DsTree);
- panel2.revalidate();
- panel2.repaint();
- }
- }
- });

将顶级容器设置为可见状态,显示GUI界面。
- panel.add(jSplitPane, BorderLayout.CENTER);
-
- frame.setContentPane(panel);//用于设置 JFrame 窗口的内容面板(content pane)的方法
- // 显示窗口
- frame.setVisible(true);
打开工作空间主要用到 Workspace.open(workspaceConnectionInfo)接口,下面的WorkspaceTree是打开工作空间将工作空间赋予工作空间树,可以看到工作空间里有哪些数据。
- WorkspaceConnectionInfo workspaceConnectionInfo = new WorkspaceConnectionInfo();
- workspaceConnectionInfo.setType(WorkspaceType.SMWU);
- workspaceConnectionInfo.setServer("D:/supermap/11.1.1/正式版/supermap-iobjectsjava-11.1.1-win-all/SampleData/World/World.smwu");
- workspace = new Workspace();
- workspace.open(workspaceConnectionInfo);
- workspaceTree = new WorkspaceTree();
- workspaceTree.setWorkspace(workspace);
打开地图主要是Map.open("地图名称")接口,而MapControl.getMap()可以拿到当前地图窗口中的Map。
- mapControl = new MapControl();
- mapControl.getMap().setWorkspace(workspace);
- mapControl.getMap().open("世界地图");
- mapControl.getMap().refresh();
将地图窗口的Map赋给图层管理器的layersTree图层树,使地图与图层管理器相关联。
- layersTree = new LayersTree();
- layersTree.setMap(mapControl.getMap());
打开场景主要是Scene.open("场景名称")接口,而SceneControl.getScene()可以拿到当前场景窗口中的Scene。
- sceneControl = new SceneControl();
- sceneControl.getScene().setWorkspace(workspace);
- sceneControl.getScene().open("场景");
- sceneControl.getScene().refresh();
将场景窗口的Scene赋给图层管理器的layer3DsTree图层树,使场景与图层管理器相关联。
- layer3DsTree = new Layer3DsTree();
- layer3DsTree.setScene(sceneControl.getScene());
- import javax.swing.*;
- import javax.swing.border.TitledBorder;
- import java.awt.*;
- import javax.swing.event.ChangeEvent;
- import javax.swing.event.ChangeListener;
-
- import com.supermap.data.*;
- import com.supermap.mapping.*;
- import com.supermap.realspace.*;
- import com.supermap.ui.*;
-
- public class ce1 {
- private static Workspace workspace = null;
- private static WorkspaceTree workspaceTree;
- private static MapControl mapControl;
- private static SceneControl sceneControl;
- private static LayersTree layersTree = null;
- private static Layer3DsTree layer3DsTree = null;
- private static Map map = null;
- private static Scene scene = null;
-
- public static void main(String[] args) {
- sceneControl = new SceneControl();
- openWorkspace();//打开工作空间
- openMap();//打开地图
- maptolayer();//地图窗口与图层管理器窗口联动
-
-
- //SwingUtilities.invokeLater作用是将任务放入事件调度线程(EDT)中执行,以确保界面操作的线程安全性。
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- createAndShowGUI();
- }
- });
- }
- /**
- * 创建窗口,将窗口分割成三个区域,分别加载工作空间管理器、图层管理器、场景和地图的tab
- */
- private static void createAndShowGUI() {
- // 创建 JFrame 窗口
- JFrame frame = new JFrame("SuperMap UI 窗口");
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//表示在关闭窗口时直接退出程序
- frame.setSize(1400, 800);
- frame.setExtendedState(Frame.MAXIMIZED_BOTH);//使 JFrame 窗口在显示时占据整个屏幕的空间,最大化窗口的宽度和高度,以便最大程度地利用可用的显示区域。
- frame.addWindowListener(new java.awt.event.WindowAdapter() {//监听窗口事件,sceneControl必须有这个监听窗口事件
- public void windowClosing(java.awt.event.WindowEvent e) {
- sceneControl.dispose();
- }
- public void windowOpened(java.awt.event.WindowEvent e) {
-
- openScene();//打开场景
- scenetolayer();//场景窗口与图层管理器联动
- }
- });
-
-
- JPanel panel = new JPanel();
- panel.setLayout(new BorderLayout());//是将 JPanel 的布局管理器设置为 BorderLayout,以便使用 BorderLayout 的布局规则来摆放该面板上的组件。
- //创建分割窗格
-
- JSplitPane jSplitPane = new JSplitPane();//用于创建可拖动的分割窗格,可以将两个组件放置在水平或垂直方向上的分割线两侧。
- jSplitPane.setDividerSize(10);//将设置分割窗格的分割线大小为 10 像素。
- jSplitPane.setDividerLocation(260);// 将设置分割窗格的分割线位置为距离容器起始位置 260 像素的位置。
-
- JSplitPane leftsplitPane = new JSplitPane();//创建左侧分割窗口
- leftsplitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);//表示垂直分割,即将容器分割为上下两部分。
- leftsplitPane.setDividerLocation(250);// 将设置分割窗格的分割线位置为距离容器起始位置 250 像素的位置。
- /*
- 在左侧分割窗口的顶部窗口添加带有标签和线框的panel1,panel1里添加工作空间管理器控件
- */
- JPanel panel1 = new JPanel();
- panel1.setLayout(new BorderLayout());//是将 JPanel 的布局管理器设置为 BorderLayout,以便使用 BorderLayout 的布局规则来摆放该面板上的组件。
- panel1.setBorder(new TitledBorder("工作空间管理器"));
- panel1.add(workspaceTree);
- leftsplitPane.setTopComponent(panel1);//在左侧分割窗口设置顶部组件
-
-
- JTabbedPane jTabbedPane = new JTabbedPane();
- // 将选项卡添加到 JTabbedPane
- jTabbedPane.addTab("地图窗口", mapControl);
- jTabbedPane.addTab("场景窗口", sceneControl);
- jSplitPane.add(jTabbedPane, JSplitPane.RIGHT);//将选项卡容器加到右侧分割面板
-
-
- /*
- 在左侧分割窗口的底部窗口添加带有标签和线框的panel2,panel2里添加图层管理器控件
- */
- JPanel panel2 = new JPanel();
- panel2.setLayout(new BorderLayout());//是将 JPanel 的布局管理器设置为 BorderLayout,以便使用 BorderLayout 的布局规则来摆放该面板上的组件。
- panel2.setBorder(new TitledBorder("图层管理器"));
- panel2.add(layersTree);
- /*监听tab页面,若当前为地图窗口,则移除layer3DsTree,添加layersTree,使地图和二维图层树相关联。
- 若当前窗口为场景窗口,则移除layersTree,添加layer3DsTree,使场景和三维图层树相关联。
- */
- jTabbedPane.addChangeListener(new ChangeListener() {//监听选项卡更改事件
- public void stateChanged(ChangeEvent e) {
- // 获取当前选中的选项卡索引
- int selectedIndex = jTabbedPane.getSelectedIndex();
- // 在选项卡被选择时执行你的操作
- if(selectedIndex==0){
- panel2.remove(layer3DsTree);
- panel2.add(layersTree);
- panel2.revalidate();//布局的重新计算
- panel2.repaint();//布局的重绘
- }else{
- panel2.remove(layersTree);
- panel2.add(layer3DsTree);
- panel2.revalidate();
- panel2.repaint();
- }
- }
- });
- leftsplitPane.setBottomComponent(panel2);//在左侧分割窗口设置底部组件
-
- jSplitPane.add(leftsplitPane, JSplitPane.LEFT);//将leftsplitPane分割窗口添加到左侧分割面板
-
-
- panel.add(jSplitPane, BorderLayout.CENTER);
-
- frame.setContentPane(panel);//用于设置 JFrame 窗口的内容面板(content pane)的方法
- // 显示窗口
- frame.setVisible(true);
- }
-
- /**
- * 打开工作空间
- */
- private static void openWorkspace() {
- WorkspaceConnectionInfo workspaceConnectionInfo = new WorkspaceConnectionInfo();
- workspaceConnectionInfo.setType(WorkspaceType.SMWU);
- workspaceConnectionInfo.setServer("D:/supermap/11.1.1/正式版/supermap-iobjectsjava-11.1.1-win-all/SampleData/World/World.smwu");
- workspace = new Workspace();
- workspace.open(workspaceConnectionInfo);
- workspaceTree = new WorkspaceTree();
- workspaceTree.setWorkspace(workspace);
- }
-
- /**
- * 打开地图
- */
- private static void openMap() {
- mapControl = new MapControl();
- mapControl.getMap().setWorkspace(workspace);
- mapControl.getMap().open("世界地图");
- mapControl.getMap().refresh();
-
- }
-
- /**
- * 地图窗口与图层管理器窗口联动
- */
- private static void maptolayer() {
- layersTree = new LayersTree();
- layersTree.setMap(mapControl.getMap());
- }
-
- /**
- * 打开场景
- */
- private static void openScene() {
- sceneControl.getScene().setWorkspace(workspace);
- sceneControl.getScene().open("场景");
- sceneControl.getScene().refresh();
- }
-
- /**
- * 场景关联图层窗口
- */
- private static void scenetolayer() {
- layer3DsTree = new Layer3DsTree();
- layer3DsTree.setScene(sceneControl.getScene());
- }
-
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。