World Wind Java开发之三 显示状态栏信息

先来看下本篇博客索要达到的效果:

找到源码下的gov.nasa.worldwind.util下的StatusBar.java文件,可以看到状态栏显示的信息主要包括视点高度以及对应空间点三维坐标以及是否使用网络等信息。在后续的开发中采用离线模式,因此不需要联网,也不显示网络状态信息。代码依次如下面几幅图所示:

修改完源代码后,将源代码文件导出为jar包,在我们的工程下引用即可。后面如果需要修改源代码,都按这种方式操作;具体操作步骤如下:

需要说明的是导出的时候可以只勾选src文件夹也可以默认。导出后将worldWind2.0.jar文件拷贝到我们的工程目录下,添加应用即可。下面是所有源码:

package cn.whu.vge;

import gov.nasa.worldwind.Model;
import gov.nasa.worldwind.WorldWind;
import gov.nasa.worldwind.WorldWindow;
import gov.nasa.worldwind.avlist.AVKey;
import gov.nasa.worldwind.awt.WorldWindowGLCanvas;
import gov.nasa.worldwind.util.StatusBar;

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JToolBar;

/**
 * @author Administrator
 *
 */

public class GFScope
{

	private JFrame GFScopeMainFrame; // 主窗体
	private WorldWindowGLCanvas worldWindowGLCanvas; // 声明WWJ画布
	private JPanel WorldWindPanel;  //三维视图面板
	private JPanel Layerpanel;      //图层管理面板
	private JPanel StatusBarpanel;  //状态栏面板

	private StatusBar statusBar;    //状态栏
//	private WorldWindow wwd;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args)
	{
		EventQueue.invokeLater(new Runnable()
		{
			public void run()
			{
				try
				{
					GFScope window = new GFScope();
					window.GFScopeMainFrame.setVisible(true);
					window.GFScopeMainFrame.setTitle("XXXXX子系统");
					WorldWind.setOfflineMode(true); // 设置离线运行模式

				}
				catch (Exception e)
				{
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public GFScope()
	{
		initialize();

		InitializeEarth(WorldWindPanel,StatusBarpanel);
	}

	/**
	 * Initialize the contents of the frame.
	 */
	/**
	 *
	 */
	private void initialize()
	{
		// 主窗体
		GFScopeMainFrame = new JFrame();
		GFScopeMainFrame.setIconImage(Toolkit.getDefaultToolkit().getImage(
				GFScope.class.getResource("/images/32x32-icon-earth.png")));
		GFScopeMainFrame.setBounds(100, 100, 1000, 800);
		GFScopeMainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		GFScopeMainFrame.getContentPane().setLayout(null);

		/**
		 * 菜单项
		 */
		JMenuBar menuBar = new JMenuBar();
		menuBar.setBounds(0, 0, 984, 30);
		GFScopeMainFrame.getContentPane().add(menuBar);

		JMenu mnf = new JMenu("\u6587\u4EF6(F)");
		menuBar.add(mnf);

		JMenu mnv = new JMenu("\u89C6\u56FE(V)");
		menuBar.add(mnv);

		JMenu mnNewMenu = new JMenu("\u5DE5\u5177(T)");
		menuBar.add(mnNewMenu);

		JMenu mnNewMenu_1 = new JMenu("\u5206\u6790(A)");
		menuBar.add(mnNewMenu_1);

		JMenu mnh = new JMenu("\u5E2E\u52A9(H)");
		menuBar.add(mnh);

		/**
		 * 工具条
		 */

		JToolBar toolBar = new JToolBar();
		toolBar.setBounds(0, 28, 984, 30);
		GFScopeMainFrame.getContentPane().add(toolBar);

		JButton btnNewButton = new JButton("");
		btnNewButton.setIcon(new ImageIcon(GFScope.class
				.getResource("/newt/data/cross-grey-alpha-16x16.png")));
		toolBar.add(btnNewButton);

		/**
		 * 面板(图层面板、三维视图面板)
		 *
		 * @author
		 */
		Layerpanel = new JPanel();
		Layerpanel.setBounds(0, 60, 194, 702);
		GFScopeMainFrame.getContentPane().add(Layerpanel);

		WorldWindPanel = new JPanel();
		WorldWindPanel.setBounds(194, 60, 790, 673);
		GFScopeMainFrame.getContentPane().add(WorldWindPanel);

	    StatusBarpanel = new JPanel();
		StatusBarpanel.setBounds(194, 732, 790, 30);
		GFScopeMainFrame.getContentPane().add(StatusBarpanel);

	}

	private void InitializeEarth(JPanel panel1,JPanel panel2)
	{
		// 按指定尺寸创建画布
		Dimension canvasSize = new Dimension(790, 688);
		this.worldWindowGLCanvas = new WorldWindowGLCanvas();
		this.worldWindowGLCanvas.setPreferredSize(canvasSize);

		// 创建Earth模型,并与画布绑定
		Model model = (Model) WorldWind
				.createConfigurationComponent(AVKey.MODEL_CLASS_NAME);
		this.worldWindowGLCanvas.setModel(model);
		panel1.add(worldWindowGLCanvas);

		/**
		 *初始化状态栏信息
		 * */
		this.statusBar=new StatusBar();
		this.statusBar.setEventSource(worldWindowGLCanvas);
		panel2.add(statusBar);

	}
}

欢迎大家留言交流!

时间: 2024-08-30 01:34:50

World Wind Java开发之三 显示状态栏信息的相关文章

World Wind Java开发之一

参照<World wind Java三维地理信息系统开发指南随书光盘>以及官网论坛,开始学习World Wind Java开发. 第一个demo //基础类 public class VGE_GFBasicClass extends JFrame { protected WorldWindowGLCanvas worldWindowGLCanvas; //WorldWind 画布 protected StatusBar statusBar; //状态栏 protected Model mode

World Wind Java开发之六——解析shape文件(上)

最近一直忙于导师项目的事情了,几天没更新了,昨天和今天研究了下WWJ解析shp文件的源代码,现在记录下,希望可以帮到更多的人! 上一篇博客:World Wind Java开发之五--读取本地shp文件只讲了如何加载shp文件,没有涉及到shp文件的解析,我们这篇博客紧接上一篇博客,利用WWJ来解析shp文件.首先来看用到的源码包和相关类,如下图所示.解析shp文件主要用到Shapefile(shapefile文件类).ShapefileRecord(shape文件记录类).DBaseRecord

World Wind Java开发之八——加载本地缓存文件构建大范围三维场景

上一篇博客主要是针对小文件直接导入WW中显示,然而当文件特别大时,这种方式就不太可行.因此要将大文件切片,生成本地缓存,WW可以加载本地缓存文件,保障浏览场景时的流畅性. 1.使用Global Mapper生成WW缓存切片 使用Global Mapper生成WW缓存切片的步骤已上传至使用GlobalMapper生成WW缓存切片,这里不再赘述.生成后的切片可以放在任意文件夹下,目前参考了WWJ自带的例子InstallImageryAndElevationsDemo,暂时将数据放在C:\Progra

[转]World Wind Java开发之五——读取本地shp文件

World Wind Java 使用IconLayer图层类表现点和多点数据,使用RenderableLayer图层表现线和面数据,一个图层只能对应一组shape文件.World Wind Java首先使用ShapefileLoader类完成对shape文件的读取和加载,再通过createLayerFromSource方法创建RenderableLayer,最后将创建的Layer加在layers上.源码如下: /** * * 方法名称: AddShapeData : * 方法描述: 添加本地sh

World Wind Java开发之五——读取本地shp文件

World Wind Java 使用IconLayer图层类表现点和多点数据,使用RenderableLayer图层表现线和面数据,一个图层只能对应一组shape文件.World Wind Java首先使用ShapefileLoader类完成对shape文件的读取和加载,再通过createLayerFromSource方法创建RenderableLayer,最后将创建的Layer加在layers上.源码如下: /** * * 方法名称: AddShapeData : * 方法描述: 添加本地sh

World Wind Java开发之十一——加载热点信息(仿Google Earth)

在GE的图层中有一个照片图层,在浏览时可以看到各地的一些图片,我们称之为热点信息,如下图所示: 再来看下本文的实现效果: 效果是不是很像呢,其实实现这个很简单,参照examples中的Balloons就可以很容易的实现,这里我自己封装了BalloonUtil类便于复用,代码很简单都加了注释就不再一一展开了,直接附上源代码,有看不明白的地方可以留言交流哈. /** * @Copyright 2014-2020 @??? **/ package edu.whu.vge.util; import go

World Wind Java开发之十一——加载热点信息(仿Google Earth)(转)

在GE的图层中有一个照片图层,在浏览时可以看到各地的一些图片,我们称之为热点信息,如下图所示: 再来看下本文的实现效果: 效果是不是很像呢,其实实现这个很简单,参照examples中的Balloons就可以很容易的实现,这里我自己封装了BalloonUtil类便于复用,代码很简单都加了注释就不再一一展开了,直接附上源代码,有看不明白的地方可以留言交流哈. [java] view plain copy print? /** * @Copyright 2014-2020 @??? **/ packa

World Wind Java开发之十五——加载三维模型

之前的一篇博客是关于加载粗三维模型的,见http://blog.csdn.net/giser_whu/article/details/43452703,这个地方还存在着不能加载纹理的问题,一直没呢解决.那么WW如何加载常用的三维模型格式(3ds.obj.skp)呢,通过一番搜索,了解到WW可以加载collada的dae格式的三维模型,并且还可以加载kml\kmz文件,那么WW加载三维模型的方法就出来了:首先将其他格式三维模型转换为kmz或kml文件,再加载.这里我是从su的三维模型库中下载的sk

World Wind Java开发之四——搭建本地WMS服务器

在提供地理信息系统客户端时,NASA还为用户提供了开源的WMS Server 服务器应用:World Wind WMS Server.利用这个应用,我们可以架设自己的WMS服务并使用自己的数据(也支持缓存转发),这样开发的应用就不必依赖于互联网连接,也可以抛开NASA提供的数据源而独立运行. 1.准备工作 运行WWS服务器需要JDK.JOGL.GDAL包以及World Wind Server压缩包.资源已上传至WorldWind Java配置WMS服务器,请自行下载. 2.安装JDK 随便一搜都