编写一个程序,在面板显示显示一个风车,并实现旋转的效果,效果如下图:
注意:画扇形方法: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); } } }