本套件主要解决的问题是:
Java前端控制学习难度较高,但实际应用场景较少,本套件能让Java学习者简单快速的实现JAVA前端中控件的各种运动方式,而无需完整学习Java的UI代码块。
本套件在Java三种前端实现方案中(awt,swing,swt)中选用了资源占用最小也是最新的Swt方案,由于控件运动的共通性,故选用了最具代表性的Button控件作为运动实例控件。
套件命名为GMP(Graphics Moving Package),导入Java项目中即可使用。套件内带有一个监听类ButtonMoveListener,两个工具类GongJu、Model。
Model工具类中有四种运动方式可选,分别是circle(圆周运动)、straight(直线运动)、minLeap(最小位移运动)、absStraight(绝对直线运动)。
circle(圆周运动)支持一个button以另一个button0为圆心做圆周运动,button的运动速度可控(通过单次运动长度和线程休眠时间),button0也可同时环绕另外一个button2做圆周运动,故此运动方式可表现双星运动或月地日三星运动规律;
straight(直线运动)支持一个button以另一个button0为目标做最小路径的直线运动, button的运动速度可控(通过单次运动长度和线程休眠时间),button0亦可参与其他运动中;
minLeap(最小位移运动)支持一个button以另一个button0为终点做每次横纵坐标至多1变化的运动,button的单次运动时间可控(通过线程休眠时间),此项适用于运动追踪,button0亦可参与其他运动中;
absStraight(绝对直线运动)支持一个button以另一个button0为目的地做绝对直线运动,以上运动由于计算误差或其他原因难以保证绝对直线,此项通过计算横纵坐标的最大公约数得到绝对直线运动轨迹,button的单次运动时间可控(通过线程休眠时间),此项适用于描画基准线,不建议button0参与其他运动中。
GongJu类中有六种方法可用,分别是around(double类型约数)、maxCommonDivisor(最大公约数)、RectToPolar(直角坐标转极坐标)、PolarToRect(极坐标转直角坐标)、getSpeedXY(得到横纵坐标运动速度)、minLeap(最小位移横纵坐标运动位移),主要用于Model类的运动计算,亦可供自定义运动方式使用。
around(double类型约数)保持以四舍五入的方式精确控制位数,以供运动button确定横纵坐标;
maxCommonDivisor(最大公约数)得到两个数的最大公约数,以供absStraight(绝对直线运动)使用;
RectToPolar(直角坐标转极坐标)将以button0为圆心建立极坐标系,将button的直角坐标转化为以button0为圆心的极坐标,通过改变相同的角度,保证button运动的平稳性,此项供circle(圆周运动)使用;
PolarToRect(极坐标转直角坐标)将均匀变化的button的极坐标转化为直角坐标以供在前端显示,以契合Java前端中的只支持直角坐标的控件位置控制方式,此项供circle(圆周运动)使用;
getSpeedXY(得到横纵坐标运动速度)通过计算运动button和目标button0的横纵坐标差值,等到其角度,再将设定的速度通过正余弦计算,得到横纵坐标方向的运动边速度,使其轨迹最大程度保持直线,此项供straight(直线运动)使用;
minLeap(最小位移横纵坐标运动位移)返回目标button0与运动button横纵坐标各自差值的正负,确定button的运动大致方向,此项供minLeap(最小位移运动)使用。
ButtonMoveListener监听类提供鼠标右键按压拖动button控件的监听事件,再任意button控件中加上addMouseListener(newButtonMoveListener())可实现任意拖动功能。
与此之外,还提供四种基本运动实例及一个自定义运动实例,自定义运动实例ModelRainbow实现点击按钮在其周围形成彩虹功能,展示轨迹显示方法及色彩描绘方法。