使用Java制作太阳系模型(1)

开发工具与关键技术: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
这样就可以走圆形或者椭圆了,那么做太阳系模型就是手到擒来了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值