日常练习随笔
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() { } }
相关文章推荐
- 随笔markdown使用的练习,技术搜索,两个日常英语
- 日常练习之路径分隔符的使用
- [c++,小练习] 日常小程序_1
- 日常练习-2017年2月7日
- 日常管理随笔一
- 日常思维练习(2)
- 日常练习之抽象类
- 日常练习:lintcode 39. 恢复旋转排序数组
- 【日常练习】Prime Ring Problem(素数环)
- hadoop日常命令随笔记载
- 做练习的随笔
- nodejs-日常练习记录-使用express搭建static服务器.
- 李天平:日常管理随笔二
- C语言编程练习随笔
- 李天平:日常管理随笔二
- 日常练习:lintcode64. 合并排序数组
- 日常练习:lintcode60. 搜索插入位置
- 日常练习:lintcode49. 字符大小写排序
- c语言日常 10_8练习
- 【JAVA 日常练习 13.9】+ 接口 + 抽象类