Java第二次作業第三題
阿新 • • 發佈:2018-11-11
四葉玫瑰線的圖形設計:當用滑鼠拖拽改變視窗大小時,四葉玫瑰線會重新繪製
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; } } }
執行結果如圖: