开发工具与关键技术:MyEclipse 10、JAVA
作者:曾浩源
撰写时间:2019年04月22日
Java中有个工具类:Frame,它可以制作桌面窗体应用程序,要制作太阳系模型,就先需要了解一下这个类:
一、如何显示窗体以及设置它的位置和大小;
二、如何在窗体里面写入所要加载的内容;
三、如何让内容简单的动起来;
第一个问题:如何显示窗体以及设置它的位置和大小
首先该类需要继承Frame,然后在类里创建一个方法frame,输入设置窗体:
public class WenXianShiYan extends Frame {
private static final long serialVersionUID = 1L;
public void frame(){
setSize(500, 500);//设置窗体大小(宽高)
setLocation(100, 100);//设置窗体的位置,以电脑屏幕的左上角为原点,纵向y轴,横向x轴
setVisible(true);//窗体默认为不显示(false),所以要设置为true
}
public static void main(String[] args) {
WenXianShiYan shiYan=new WenXianShiYan();
shiYan.frame();
}
}
但会发现,该窗口不能关闭,所以,需要添加一个窗口的监听事件,重写关闭方法。
addWindowListener(new WindowAdapter() {//在frame方法里加入窗体监听事件
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
第二个问题:如何在窗体里面写入所要加载的内容
在类里重写属于frame的paint方法在frame方法里,g就相当一支画笔,可以更换颜色,可以画线,画圆,画矩形,等等。
g.drawLine(x1,y1,x2,y2); //画线 两点绘一线(每个点都是以窗体左上角为原点)
g.drawRect(x,y, width, height);//画矩形 设置xy点,以该点为矩形左上角点
g.drawOval(x,y, width, height);//画圆 同矩形原理得出矩形,画出矩形内切圆
g.fillRect(x, y, width, height);//画实心矩形
g.fillOval(x, y, width, height);//画实心圆
第三个问题:如何让内容简单的动起来
首先在paint方法里面绘制一个实心圆,设置颜色为蓝色;
public void paint(Graphics g) {
Color c=g.getColor();
g.setColor(Color.BLUE);
g.fillOval(100, 100, 20, 20);
g.setColor(c);
}
改变颜色前先把最原始的颜色保存一下,之后改变完颜色后,要把颜色设置回原始的颜色。
然后在类里创建一个内部类,PaintThread,继承线程Thread类,最后再该类里重写run方法,在方法里使用while死循环,调用repaint();每调用一次,睡眠一次。
class PaintThread extends Thread{
@Override
public void run() {
while (true) {
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
最后在frame方法里,启动线程;
new PaintThread().start();
启动线程后,窗口内容不断的重画,接下来只有要将x和y作为成员变量,不停的变化即可。
double x,y;
public void paint(Graphics g) {
Color c=g.getColor();
g.setColor(Color.BLUE);
g.fillOval((int)x, (int)y, 20, 20);
g.setColor(c);
x+=3;
y+=2;
}
想要横着走,就自增x或自减x,想要竖着走,就自增y或自减y,那想要弯着走,也是可以实现的。
x2(自身x) = 200(中心点x) + 100(长轴) * Math.cos(degree1);
y2(自身y) = 200(中心点y) + 50(短轴) * Math.sin(degree1);
degree1 += 0.1;
而角度加的越多,就代表走一圈越快,那么这个0.1不就可以变成变量代表速度speed
这样就可以走圆形或者椭圆了,那么做太阳系模型就是手到擒来了。