java绘图坐标体系.docx
java绘图坐标体系像素:计算机屏幕上显示的内容都是屏幕上的每一个像素组成。例如:计算机显示器的分辨率是800*600,表示计算机屏幕上的每一行由800个点组成,共有600行,整个计算机屏幕共有480000个像素。像素是一个密度单位,而厘米是长度单位,两者无法比较。绘图的原理Part1Component类提供了两个和绘图相关最重要的方法:①:paint(Graphicsg):绘制组件的外观注意点:当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法来绘制组件。在以下情况会自动调用paint()方法:一:窗口最小化,再最大化。二:窗口的大小发生变化(注意是大小变化,而不是移动窗口)三:repaint函数被调用②:repaint():刷新组件的外观注意点:起到动感的作用。Graphics类:Graphics可以理解就是画笔,为我们提供各种绘制图形的方法:①:画直线drawLine(intx1,inty1,intx2,inty2);②:画矩形边框drawRect(intx,inty,intwidth,intheight);③:画椭圆边框drawOval(intx,inty,intwidth,intheight);④:填充矩形fillRect(intx,inty,intwidth,intheight);⑤:填充椭圆fillOval(intx,inty,intwidth,intheight);⑥:画图片drawImage(Imageimg,intx,inty,.);⑦:画字符串drawString(Stringstr,intx,inty);⑧:设置画笔的字体setFont(Fontfont);⑨:设置画笔的颜色setColor(Colorc);举例如下:
/***java绘图原理*不能再JFrame上画图,但是可以在JPanel上画图*/packageday0218;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.Image;importjava.awt.Panel;importjava.awt.Toolkit;importjavax.swing.JFrame;importjavax.swing.JPanel;publicclassDemo18_1extendsJFrame{MyPanelmp=null;publicDemo18_1(){mp=newMyPanel();this.add(mp);this.setSize(800,800);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}publicstaticvoidmain(String[]args){Demo18_1demo18_1=newDemo18_1();}}//定义一个MyPanel(是我自己的面板,是用于绘图和显示绘图的区域)classMyPanelextendsJPanel{//覆盖JPanel的paint方法//Graphics是绘图的重要类,你可以把他理解成一只画笔(可以画各种各样的)publicvoidpaint(Graphicsg){//调用父类函数完成初始化(这句话不能少,现在似乎可以不加,最好加上)super.paint(g);画一个圆//g.drawOval(20,20,40,40);g.drawOval(70,20,40,40);//画出直线//g.drawLine(40,40,90,90);//画出矩形边框//g.drawRect(100,100,50,30);//画出填充矩形//设置颜色,若每次颜色不一样,每次都要设置//g.setColor(Color.green);//g.fillRect(150,150,60,80);//g.setColor(Color.yellow);//g.fillRect(250,250,60,80);//在面板上画出图片(要先准备张图片)//Imageim=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource(“/33.jpg“));显示图片this指的是这里的JPanel//g.drawImage(im,90,90,356,521,this);//设置画笔的颜色//g.setColor(Color.PINK);//g.setFont(newFont(“华文琥珀“,Font.BOLD,55));如何画字//g.drawString(“林峰万岁“,100,200);}}java事件处理机制采取的是“委派事件模型”,是指当事件发生(比如按了鼠标,按了键盘)的时候,产生事件的对象(即事件源),会把此信息传递给事件的监听者处理的一种方式,而这里所说的信息实际上就是java.awt.evebt事件类库里某个类所创建的对象,我们暂时称之为事件的对象。小练习:点击不同的按钮,让面板的背景色发生相应的变化。代码如下:/***讲解java中的事件处理机制*理解:一个事件可以被多个类监听的**一个类要实现监听的步骤*1.实现相应的接口(KeyListener、MouseListener、ActionListener、WindowListener)*2.把接口的处理方法根据需要重新编写(Override)*3.在事件源注册监听*4.时间传递是靠事件对象*/packageday0218;importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.Graphics;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;publicclassShijianextendsJFrameimplementsActionListener{privatestaticfinallongserialVersionUID=1L;//定义JPaneljp=null;JButtonjb1,jb2;publicShijian(){jp=newJPanel();jb1=newJButton(“黑色“);jb2=newJButton(“红色“);this.add(jb1,BorderLayout.NORTH);jp.setBackground(Color.gray);this.add(jp);this.add(jb2,BorderLayout.SOUTH);Catmycat=newCat();//注册监听jb1.addActionListener(this);jb1.addActionListener(mycat);//指定action命令jb1.