基于Java Swing的找点软件设计与实现
2022-10-24杜兰兰王圣波
王 勇,洪 进,杜兰兰,王圣波
(空军预警学院,武汉 430019)
0 引言
标图课程包括在标图桌和标图软件中标示目标航迹,标图软件标示目标航迹也可以叫做计算机标图,两者的核心教学内容为找点、连线,最终掌握标示多批目标航迹的技能。标图桌上是手写标注位置和连接多个目标点,最终在标图板上呈现完整的航迹。计算机标图是通过鼠标点击完成找点,由软件自动连接目标点,最终在电脑屏幕上呈现完整的航迹,但无论是在标图桌还是计算机上标示航迹,首先都需要找到目标点的位置,然后才能标注目标属性、高度、发现时间等其它相关信息,进而连线形成航迹,这就意味着找点训练是基础。
在标图桌上组织找点训练比较容易,找到航迹点并进行标注,不连线即可。但是当前计算机标图采用的软件不具备单独标示目标位置的找点训练功能,所以教学进程安排通常是先进行标图桌上的找点训练,达到要求后推进到标图桌上连续航迹的标示训练,熟悉标图桌连续航迹标示之后直接进入计算机标示连续航线的训练。从标图桌到计算机,手工标示到软件标示是一个比较大的跨越,需要熟悉软件各功能所在区域,掌握软件操作技巧,灵活使用鼠标在屏幕中快速找到航迹点,补充其它相关信息。另外,跨到计算机标图后只能从难度较大的标示航迹入手,缺少了找航迹点这一基础训练环节,计算机标图的两大跨越对于很多基础薄弱的学员来说门槛高、起步难、训练受阻、倍受打击,畏难情绪与日俱增,后续的提升训练越发力不从心、恶性循环,学员成绩不理想,不能完成培养目标,教员压力增加。所以,无论是教学考核要求还是个人技能提升,不管是从教员还是学员的角度,降低计算机标图的门槛,缩小标图桌标图到计算机标图的跨度,对学员掌握标图技能至关重要。
本文旨在设计开发计算机标图找点训练软件,为计算机标示目标航迹提供基础训练,在软件找点训练中熟悉计算机操作。此外,找点训练简单、易上手,学员学习的积极性得到提升,掌握之后再过渡到计算机标示目标航迹也不至于手足无措。
1 Java Swing技术及软件设计
1.1 Java Swing技术
Java Swing技术主要是用于构建跨平台桌面窗口程序,它是在AWT(abstract window tookit)基础上采用Java语言编写的一种图形组件库技术。Java Swing组件除了是轻量级的,即在运行时不需要产生相应的“对等(Peer)”组件,实际由自身外观类支持,没有本地代码,不依赖操作系统,而且它的外观是可插拔的(pluggable look-and-feel)。Swing组件包括各种容器和基本组件,容器主要用来容纳和布置基本组件,也可以包含相应的容器。常见的容器有JFrame、JDialog、JPanel等;常见的基本组件包括按钮JButton、标签JLabel、单选按钮JRadio-Button。组件之间的关系如图1所示。
图1 组件关系图
1.2 找点软件设计
图2所示为本软件的系统架构图,分为功能界面层、基础组件层、数据存储层,每一层的实现都依赖下一层提供的支持,用户交互界面使用Swing提供的丰富基础组件来构建,通过监听控件的鼠标事件来完成具体功能的业务处理。鉴于软件没有网络请求的需求,可以做成单机版,因此持久化数据采用本地文件进行存储,访问本地文件系统避免了网络传输的耗时,运行速度更快。
图2 找点软件系统架构图
2 关键技术及实现
2.1 软件找点
以雷达位置为圆心,通过编程绘图模拟雷达扫描区域,半径是雷达最大探测距离,软件语音播报表示目标坐标位置的方位距离数据,根据扫描区域大小将方位距离的数值按比例转换成坐标点,学员在模拟的扫描区域内找到该坐标点的大致位置,鼠标点击即可放大点击位置附近的区域,放大区中显示方位距离辅助线,在放大区中找到并点击方位距离的准确位置。
2.2 坐标回显
在放大区中点选目标位置之后,放大区消失,将放大区中点选的坐标点经过等比缩小变换后回显到极坐标中。
2.3 重绘标记
软件找点训练需要实时显示找到的点迹和对应的正确点迹,找点过程是动态的,所以绘制点迹也是动态的。Swing组件绘图会先把组件中之前的内容清空,然后开始绘制传入的新内容,所以每次绘制标记目标的坐标值后都需要保存当前内容用于下一次重绘。
2.4 语音播报
该功能在Java项目中引入第三方依赖jacob.jar,其内部使用JNI封装了对动态链接库jacob-1.18-x86.dll中C++操作系统语音功能接口的方法调用,所以首先需要将dll文件拷贝到C:\Windows\System32目录,文件拷贝代码如图3所示,将该段代码的执行放在软件入口处,软件一经启动就完成dll文件拷贝。另外,还需要把dll文件放到Java环境的jrein目录下,在制作.exe文件时会将jre内置进去。
图3 拷贝dll文件代码
想定报底中的方位距离是阿拉伯数码,军事通信都使用军用数码,所以需要将其转换成军用数码,阿拉伯数码与军用数码的对应发音见表1。转换之后,表示目标位置的“084,290”就变成了“洞八四两沟洞”。另外,为适应雷达兵部队,语音播报要使用男声,因此在运行软件之前还需要安装专门的语音包,避免使用系统自带的默认女声,安装文件TTS\NextUp.com-NeoSpeech Chinese Wang16 Voice.msi,选择语音包和进行其它配置都可以通过在播报内容中添加xml标签进行设置,比如指定语音包之后播报内容就是“”,Name的取值对应语音包在系统注册表中的Name属性值。
表1 军用数码对应表
根据教学进程、学习情况、熟练程度需要对想定播报的速度进行调整,播放速度通过两个参数进行控制,一个是报读文本本身内容的速度,实现方式为“”,speed的取值为-10到10,一个是报读每个目标位置之间的间隔时间,实现方式为“
2.5 坐标变换
→
有时找点训练结束后会对软件判定结果有所怀疑,所以每次训练都会把找点结果保存到文件中,这样可以通过校对结果与想定报底来进行验证,但是界面上找到的点迹是鼠标位置在坐标系中相对坐标原点在轴、轴方向上的偏移量,而报底中的数据都是方位距离格式,为了便于校对,需要把坐标值转换成方位距离数据。此外,当鼠标在界面中移动时,实时显示鼠标位置对应的方位距离信息,有助于更好地找点,这种情况也需要把坐标值转换成方位距离。
图4 坐标值转换成方位距离
、的计算公式如下:
→
在找点训练中,为了在软件界面上直观显示找到的点迹与正确报底之间的偏差,除了在界面上显示找到的点迹,还要把想定报底标注在界面上。但由于想定报底用方位距离表示目标位置,软件界面用坐标系中的坐标值表示位置,因此需要把方位距离转换成坐标值。
图5 方位距离转换成坐标值
Δ、Δ、、的计算公式如下:
2.6 误差计算
通过三角和反三角函数将方位距离数据转换成屏幕坐标值以及坐标转换计算的结果都是浮点数类型,而Swing获取的鼠标位置都是整数类型,浮点数强制转换成整数会丢失小数部分的精度,所以会导致找到的点迹与想定中的对应的目标位置存在一定误差。
对于找到的点迹集合中的每一个数据,循环遍历想定中的目标位置集合,逐个计算与点迹坐标之间的距离,距离小于2 km的都算正确,以此消除找点误差。
3 运行效果
如图6所示,软件界面布局分为左右两部分,左侧是模拟的雷达扫描界面,同心圆的中心是雷达所在位置,四个同心圆分别为与雷达相距100 km、200 km、300 km、400 km的距离圈,每偏转30°绘制一条方位辅助线。右侧最上面是鼠标移动时在屏幕中的坐标实时转换成方位距离之后的信息和系统当前时间,想定属性选择区用来指定生成想定时的参数,包括生成的方位数据的要求、距离数据的要求、想定个数,想定播报区可以调整想定播放的速度和选择训练模式,贯彻由易到难、循序渐进的教育训练方针,功能区提供使用者操作的功能按钮。
图6 软件主界面
听到语音播报的方位距离信息之后,在模拟扫描界面可以大致定位其位置,点击该位置就会显示放大区。如图7所示,放大区中1~360°每一度都有辅助线,间隔10 km就有距离圈辅助线,按住鼠标在放大区中拖动时,放大区中黑色数据是鼠标在屏幕上的坐标值实时转换成的方位距离,随鼠标同步移动,便于快速准确找点。
图7 局部放大
在放大区中准确找到目标位置后,鼠标点击,放大区消失,放大区中的坐标等比缩小转换后显示在模拟扫描界面,如图8所示。图中红色等边三角形表示找到的点迹,蓝色表示目标真实的位置。找点训练结束后,左下角面板中显示正确、错误、遗漏点数。
图8 结果显示
4 结语
采用Java Swing技术开发的找点训练软件,涵盖了生成想定、载入和语音播报想定、找点、误差计算等主要功能,贯穿计算机找点训练的整个过程,为计算机标示目标完整航迹提供基础训练。但是语音播报线程与结果显示线程不能异步进行,不能同步通信,存在界面显示的当前目标点与播报点不一致问题,另外,当前使用的语音包只支持Win7 32位系统,这限制了软件的使用范围,下一步考虑更换引入DLL播报语音的方式。