您的位置:首页 > 其它

日常练习随笔

2015-02-10 16:37 155 查看
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() {
	
		       
	}
	
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: