日常練習隨筆

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;

import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.plaf.SliderUI;


public class RoseJFrame extends JFrame implements ActionListener {
    private RoseCanvas rose;
    private JButton button_color;
	public RoseJFrame()
	{
		super("四葉玫瑰線");             //設置框架標題
		Dimension dim=getToolkit().getScreenSize();         //獲取屏幕分辨率
		this.setBounds(dim.width/4, dim.height/4, dim.width/2, dim.height/2);  //設置框架顯示位置
		this.setDefaultCloseOperation(3);  //設置關閉按鈕功能爲關閉
		
		JPanel jpanel=new JPanel();                    //定義一個面板對象
		this.getContentPane().add(jpanel, "North");    //將面板對象加入到當前窗口的北方,默認佈局管理器爲BorderLayout
		button_color=new JButton("選擇顏色");        //實例化按鈕對象,並設置按鈕標籤文字
		jpanel.add(button_color);                           //向面板容器中添加按鈕 面板默認佈局管理器爲FlowLayout
		button_color.addActionListener(this);                 //對按鈕設置事件監聽器響應單機事件
		rose=new RoseCanvas(Color.red);                              
		this.getContentPane().add(rose, "Center");   //將畫布加入到框架的中間位置
		this.setVisible(true);         //設置框架容器的可見性,true爲可見  注意:此行命令應寫在框架構造函數的最後,這樣才能保證容器中的所有組件可見
	}
	public void actionPerformed(ActionEvent e) {
	     Color c=JColorChooser.showDialog(this, "選擇顏色", Color.blue);  //單擊按鈕觸發的事件,顯示顏色對話框,可以具體指定顏色
	     rose.setColor(c);   //調用構造法方法設置顏色
	     rose.repaint();        //每選擇新的顏色,重畫一次
	}	


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

}

class RoseCanvas extends Canvas implements ComponentListener,Runnable
{

	private Color color;
	public RoseCanvas(Color color)  //帶參數的構造方法,構造方法必須和類名稱一致 
	{
		this.setColor(color);                  //設置框架的顏色
		this.addComponentListener(this);                  //添加組件事件監聽器
	}
	
	public void setColor(Color color)
	{
		this.color=color;
	}
	
	public void paint(Graphics g)
	{
		int x0=this.getWidth()/2;   //設置初始值
		int 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);         //設置半徑的值  根據公式 r=a*sinb
				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);    //畫橢圓
			}
			j+=20;    //j的值每循環遞增20,畫一次四葉玫瑰線
		}
	}
	
	public void componentResized(ComponentEvent e) {
		
		  this.repaint();        //重畫
	}
	
	public void componentMoved(ComponentEvent e) {}

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

	
	public void run() {
	
		       
	}
	
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章