旋转风车

 
 

编写一个程序,在面板显示显示一个风车,并实现旋转的效果,效果如下图:

注意:画扇形方法:fillArc(int x, int y, int w, int h, int startAngle, int arcAngle); 参数x、y、w、h的含义与drawOval方法中的参数含义是一样的; 参数startAngle是起始角; arcAngle是跨度角(即弧线覆盖的角)。 角的单位是度,遵循通常的数学习惯(即0度指向东边,并且从东边开始沿逆时针方向旋转的角度为正角)。 建议使用定时器。

图1 程序初始状态
图2 一段时间后的状态
代码:
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Main extends JFrame
{
	WindmillPanel wp=new WindmillPanel();
	int start=0;
	public Main()
	{
		this.add(wp);
	}
	public static void main(String[] args)
	{
		JFrame frame=new Main();
		frame.setTitle("");
		frame.setSize(400,300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
		
	}
	
	class WindmillPanel extends JPanel
	{
		int r=100;
		public WindmillPanel()
		{
			Timer timer=new Timer(100,new ActionListener(){

				@Override
				public void actionPerformed(ActionEvent arg0) {
					// TODO Auto-generated method stub
					start++;
					repaint();
				}
				
			});
			timer.start();
		}
		protected void paintComponent(Graphics g)
		{
			int x=getWidth()/2-r;
		    int y=getHeight()/2-r;
			super.paintComponent(g);
			g.drawOval(x, y, 2*r, 2*r);
			g.setColor(Color.RED);
			g.fillArc(x+10, y+10, 2*(r-10), 2*(r-10), start, 60);
			g.fillArc(x+10, y+10, 2*(r-10), 2*(r-10), start+90, 60);
			g.fillArc(x+10, y+10, 2*(r-10), 2*(r-10), start+180, 60);
			g.fillArc(x+10, y+10, 2*(r-10), 2*(r-10), start+270, 60);
		}
	}
}


输入

转载于:https://www.cnblogs.com/qusay/p/4170264.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值