编写一个程序,在面板显示显示一个风车,并实现旋转的效果,效果如下图:
注意:画扇形方法:fillArc(int x, int y, int w, int h, int startAngle, int arcAngle); 参数x、y、w、h的含义与drawOval方法中的参数含义是一样的; 参数startAngle是起始角; arcAngle是跨度角(即弧线覆盖的角)。 角的单位是度,遵循通常的数学习惯(即0度指向东边,并且从东边开始沿逆时针方向旋转的角度为正角)。 建议使用定时器。
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);
}
}
}