📄 testwidget.java.svn-base
字号:
/**
* @(#) TestWidget.java 2007-11-1
*
* TIANHUI 2007
*/
package com.th.workframe;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
import javax.swing.UIManager;
import com.esri.arcgis.beans.TOC.TOCBean;
import com.esri.arcgis.beans.map.MapBean;
import com.esri.arcgis.beans.toolbar.ToolbarBean;
import com.esri.arcgis.carto.FDOGraphicsLayerFactory;
import com.esri.arcgis.carto.FeatureLayer;
import com.esri.arcgis.carto.IFDOGraphicsLayerFactory;
import com.esri.arcgis.carto.IFeatureLayer;
import com.esri.arcgis.carto.IImageDisplay;
import com.esri.arcgis.carto.IMapDescription;
import com.esri.arcgis.carto.ImageDisplay;
import com.esri.arcgis.carto.MapExtent;
import com.esri.arcgis.carto.MapServer;
import com.esri.arcgis.carto.esriViewDrawPhase;
import com.esri.arcgis.controls.ControlsMapFullExtentCommand;
import com.esri.arcgis.controls.ControlsMapPanTool;
import com.esri.arcgis.controls.ControlsMapZoomInTool;
import com.esri.arcgis.controls.ControlsMapZoomOutTool;
import com.esri.arcgis.controls.IMapControlEvents2Adapter;
import com.esri.arcgis.controls.IMapControlEvents2OnMouseDownEvent;
import com.esri.arcgis.controls.IMapControlEvents2OnMouseUpEvent;
import com.esri.arcgis.controls.IToolbarControlEventsAdapter;
import com.esri.arcgis.controls.IToolbarControlEventsOnItemClickEvent;
import com.esri.arcgis.datasourcesGDB.SdeWorkspaceFactory;
import com.esri.arcgis.geodatabase.IDataset;
import com.esri.arcgis.geodatabase.IEnumDataset;
import com.esri.arcgis.geodatabase.IFeatureClass;
import com.esri.arcgis.geodatabase.IFeatureWorkspace;
import com.esri.arcgis.geodatabase.INetworkQuery;
import com.esri.arcgis.geodatabase.NetworkDataset;
import com.esri.arcgis.geometry.Envelope;
import com.esri.arcgis.geometry.IEnvelope;
import com.esri.arcgis.geometry.IPoint;
import com.esri.arcgis.geometry.IPointCollection;
import com.esri.arcgis.geometry.Point;
import com.esri.arcgis.interop.AutomationException;
import com.esri.arcgis.system.AoInitialize;
import com.esri.arcgis.system.EngineInitializer;
import com.esri.arcgis.system.LongArray;
import com.esri.arcgis.system.PropertySet;
import com.esri.arcgis.system.esriLicenseProductCode;
import com.esri.arcgis.systemUI.esriCommandStyles;
/**
* <code><strong> TestWidget 简单类说明 </strong><code>
*
* @author <strong> GUJUN </strong>
* @version 2007-11-1 上午09:02:13
* @since 1.0
*/
public class TestWidget
extends JFrame {
/* ArcGIS */
private AoInitialize aoInit = null;
private IFeatureWorkspace ifw = null;
private MapBean map = null;
private MapServer server = null;
private IImageDisplay imageDisplay = null;
private NetworkDataset pNetDataset = null;
private INetworkQuery pNetworkQuery = null;
private String mapName = null;
private IMapDescription mapDescription = null;
private ToolbarBean toolbar = null;
private TOCBean tcb = null;
private boolean select = false;
private IPoint ipt0 = null;
private IPoint ipt1 = null;
private IEnvelope currentExtent = null;
/* 框架组件 */
private JPanel panelMain = null;
private JTextArea console = null;
/**
* 构造函数
* @throws Exception
*/
public TestWidget() throws Exception {
super("ArcGIS 的地图渲染与修饰");
//注册Engine
EngineInitializer.initializeVisualBeans();
aoInit = new AoInitialize();
aoInit.initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);
//连接SDE
connectionSDE();
//构建地图
buildMap();
//构建工具栏
buildToolBar();
//构建左侧图层树
buildTOC();
addEventListeners();
//构建窗口面板布局
JSplitPane spaneRight = new JSplitPane(JSplitPane.VERTICAL_SPLIT, false, map, buildRightBottomPanel());
JSplitPane spaneMain = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, false, tcb, spaneRight);
//设置splitbar的宽度
spaneMain.setDividerSize(8);
spaneRight.setDividerSize(8);
//设置分割面板的初始宽度
spaneMain.setDividerLocation(260);
spaneRight.setDividerLocation(680);
//设置最小尺寸
spaneRight.setMinimumSize(new Dimension(1024, 0));
//加入组件到主面板
panelMain = new JPanel(new BorderLayout());
panelMain.add("Center", spaneMain);
panelMain.add("North", toolbar);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
String msg = "关闭?";
int flag = JOptionPane.showConfirmDialog(null, msg, "确认信息", JOptionPane.YES_NO_OPTION);
if(flag == JOptionPane.YES_OPTION) {
((JFrame)we.getSource()).setVisible(false);
try { aoInit.shutdown(); }catch (Exception e) { }
System.exit(0);
}//Endif
}
});
this.setContentPane(panelMain);
this.setBounds(100, 100, 800, 600);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.setVisible (true);
}
/**
* 连接SDE
*/
public void connectionSDE() throws Exception {
PropertySet ps = new PropertySet();
ps.setProperty("SERVER", "192.168.1.220");
ps.setProperty("INSTANCE", "5151");
ps.setProperty("USER", "SDE");
ps.setProperty("PASSWORD", "SDE");
ps.setProperty("VERSION", "SDE.DEFAULT");
SdeWorkspaceFactory swf = new SdeWorkspaceFactory();
ifw = (IFeatureWorkspace) swf.open(ps, 0);
}
/**
* buildMap() 构建地图组件
*/
public void buildMap() throws Exception {
map = new MapBean();
//去掉地图边框.很关键,影响map的显示尺寸
map.setBorderStyle(com.esri.arcgis.controls.esriControlsBorderStyle.esriNoBorder);
map.setShowScrollbars(false);
map.setBackColor(0);
imageDisplay = new ImageDisplay();
imageDisplay.setDeviceResolution(96);
server = new MapServer();
server.startWithData(ifw.openFeatureDataset("SLB1027_"));
//开始加载
IEnumDataset edst = ifw.openFeatureDataset("SLB1027_").getSubsets();
IDataset ds = edst.next();
while(ds != null) {
System.out.print("加载 " + ds.getName() + "....");
int tmpType = ds.getType();
if(tmpType == com.esri.arcgis.geodatabase.esriDatasetType.esriDTNetworkDataset) {
pNetDataset = new NetworkDataset(ds);
pNetworkQuery = (INetworkQuery)pNetDataset;
}else if(tmpType == com.esri.arcgis.geodatabase.esriDatasetType.esriDTFeatureClass) {
IFeatureClass ifc = ifw.openFeatureClass(ds.getName());
if(ds.getName().indexOf("Junction") < 0) {
if(ds.getName().indexOf("Text_Layer") < 0) {
IFeatureLayer layer = new FeatureLayer();
layer.setName(ds.getName());
layer.setFeatureClassByRef(ifc);
map.addLayer(layer, 0);
}else {
IFDOGraphicsLayerFactory fdoFactory = new FDOGraphicsLayerFactory();
map.addLayer(fdoFactory.openGraphicsLayer(ifw, ifw.openFeatureDataset("SLB1027_"), ds.getName()), 0);
}//Endif
}//Endif
}//Endif
System.out.println(" 完成");
ds = edst.next();
}//Endwhile
mapName = server.getMapName(0);
mapDescription = server.getServerInfo(mapName).getDefaultMapDescription();
map.refresh(esriViewDrawPhase.esriViewGeography, null, null);
}
/**
* buildToolBar() 构建工具栏组件
*/
public void buildToolBar() throws Exception {
toolbar = new ToolbarBean();
toolbar.setItemsString("8|controls/ControlsSelectTool|0|-1|0|0|1;5|controls/ControlsAddDataCommand|0|-1|0|0|1");
//设置工具栏停止任何自动发生的更新
toolbar.setUpdateInterval(0);
toolbar.addItem( new ControlsMapZoomInTool(), 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly );
toolbar.addItem( new ControlsMapZoomOutTool(), 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly );
toolbar.addItem( new ControlsMapPanTool(), 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly );
toolbar.addItem( new ControlsMapFullExtentCommand(), 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly );
toolbar.setBuddyControl(map);
}
/**
* buildTOC() 构建左侧图层树组件
*/
public void buildTOC() throws Exception {
tcb = new TOCBean();
tcb.setLabelEdit(1);
tcb.setBuddyControl(map);
//设置宽度最小尺寸
tcb.setMinimumSize(new Dimension(260, 0));
}
/**
* buildRightBottomPanel() 构建右侧下方面板
*/
public JTabbedPane buildRightBottomPanel() {
//控制台文本框
console = new JTextArea(12, 25);
JScrollPane sp = new JScrollPane(console);
sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
console.setAutoscrolls(true);
//渲染面板
JPanel widget = new JPanel();
//标签面板
JTabbedPane tp = new JTabbedPane();
tp.addTab("控制台", new ImageIcon("image/img01.gif"), sp);
tp.addTab("渲染设置", new ImageIcon("image/img02.gif"), widget);
return tp;
}
/**
* addEventListeners() 添加事件监听
* @throws Exception
*/
public void addEventListeners() throws Exception {
//工具栏事件监听
toolbar.addIToolbarControlEventsListener(new IToolbarControlEventsAdapter() {
public void onItemClick(IToolbarControlEventsOnItemClickEvent ice) throws IOException, AutomationException {
if(select && ice.getIndex() > 2)
return;
//如果是工具栏上的选择按钮
if(ice.getIndex() == 4) {
select=true;
}else {
select=false;
}//Endif
}
});
//地图事件监听
map.addIMapControlEvents2Listener(new IMapControlEvents2Adapter() {
//鼠标按下
public void onMouseDown(IMapControlEvents2OnMouseDownEvent mdEvent) throws IOException {
if(mdEvent.getButton() == 1 && select) {
LongArray longArrayX = new LongArray();
LongArray longArrayY = new LongArray();
longArrayX.add(mdEvent.getX()-10);
longArrayX.add(mdEvent.getX()+10);
longArrayY.add(mdEvent.getY()-10);
longArrayY.add(mdEvent.getY()+10);
MapExtent mapExtent = new MapExtent();
mapExtent.setExtent(map.getExtent());
mapDescription.setMapArea(mapExtent);
imageDisplay.setHeight(map.getHeight());
imageDisplay.setWidth(map.getWidth());
IPointCollection pc = server.toMapPoints(mapDescription, imageDisplay, longArrayX, longArrayY);
ipt0 = new Point();
ipt0.putCoords(mdEvent.getMapX(), mdEvent.getMapY());
currentExtent = new Envelope();
currentExtent.setXMax(pc.getPoint(1).getX());
currentExtent.setXMin(pc.getPoint(0).getX());
currentExtent.setYMax(pc.getPoint(0).getY());
currentExtent.setYMin(pc.getPoint(1).getY());
//identify();
}
}
//鼠标弹起
public void onMouseUp(IMapControlEvents2OnMouseUpEvent muEvent) throws IOException, AutomationException {
if(muEvent.getButton() == 1 && select) {
ipt1 = new Point();
ipt1.putCoords(muEvent.getMapX(), muEvent.getMapY());
if(ipt0.getX() != ipt1.getX() || ipt0.getY() != ipt1.getY()) {
currentExtent= new Envelope();
if(ipt0.getX() >= ipt1.getX() && ipt0.getY() <= ipt1.getY()) {
//向左上拉
currentExtent.putCoords(ipt0.getX(), ipt0.getY(), ipt1.getX(), ipt1.getY());
}else if(ipt0.getX() <= ipt1.getX() && ipt0.getY() <= ipt1.getY()) {
//向右上拉
currentExtent.putCoords(ipt1.getX(), ipt0.getY(), ipt0.getX(), ipt1.getY());
}else if(ipt0.getX() >= ipt1.getX() && ipt0.getY() >= ipt1.getY()) {
//向右下拉
currentExtent.putCoords(ipt0.getX(), ipt1.getY(), ipt1.getX(), ipt0.getY());
}else if(ipt0.getX() <= ipt1.getX() && ipt0.getY() >= ipt1.getY()) {
//向左下拉
currentExtent.putCoords(ipt1.getX(), ipt1.getY(), ipt0.getX(), ipt0.getY());
}//Endif
//identify();
}//Endif
}//Endif
}
}
);
}
//console.append("x:" + muEvent.getMapX() + " y:" + muEvent.getMapY() + "\n");
//console.setCaretPosition(console.getText().length());
/**
* 程序入口
* @throws Exception
*/
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel ("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
try {
new TestWidget();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -