QusayHe

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

注意:画扇形方法: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);
		}
	}
}


输入
posted on 2014-11-20 18:39  QusayHe  阅读(302)  评论(0编辑  收藏  举报