1. 程式人生 > >Java第二次作業第三題

Java第二次作業第三題

四葉玫瑰線的圖形設計:當用滑鼠拖拽改變視窗大小時,四葉玫瑰線會重新繪製

package naizi;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class RoseJFrame extends JFrame implements ComponentListener
{   
private RoseCanvas rose;
public RoseJFrame(){
    this.setSize(600,400);
    this.addComponentListener(this);  //註冊框架視窗的元件事件監聽器
    rose = new RoseCanvas(Color.red);
    this.getContentPane().add(rose,"Center");//將rose新增到中心區域;
    this.setVisible(true);
}

public void componentResized(ComponentEvent e){//改變視窗大小時,處理事件的方法
   rose.repaint(); //重畫
}

public void componentMoved(ComponentEvent e)    {  }
public void componentHidden(ComponentEvent e)   {  }
public void componentShown(ComponentEvent e)    {  }

public static void main(String arg[]){
   new RoseJFrame();
}
}

class RoseCanvas extends Canvas                            //畫布元件
{
private Color color;                                   //顏色

public RoseCanvas(Color color)
{
   this.color=color;
}

public void paint(Graphics g){ //在Canvas上繪圖的方法
   int x0,y0;                                         //原點座標
   x0 = this.getWidth() /2;                           //寬度
   y0 = this.getHeight()/2; 
   g.setColor(color); //設定畫線顏色
   g.drawLine(x0,0,x0,y0*2);//畫線
   g.drawLine(0,y0,x0*2,y0);//畫線
   int j=40;
   while (j<200) 
   {
       for (int i=0;i<1023;i++)
       {
           double angle = i*Math.PI/512;
           double radius = j*Math.sin(2*angle);
           int x =(int) Math.round(radius * Math.cos(angle) * 2);
           int y =(int) Math.round(radius * Math.sin(angle));
           g.fillOval(x0+x,y0+y,1,1);                 //畫直徑為1的圓就是一個點
       }
       j += 20;
   }
}
}  

執行結果如圖: