1、java绘图坐标体系java绘图坐标体系像素:计算机屏幕上显示的内容都是屏幕上的每一个像素组成。例如:计算机显示器的分辨率是800*600,表示计算机屏幕上的每一行由800个点组成,共有600行,整个计算机屏幕共有480000个像素。像素是一个密度单位,而厘米是长度单位,两者无法比较。绘图的原理Part1Component类提供了两个和绘图相关最重要的方法:paint(Graphics g):绘制组件的外观注意点:当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法来绘制组件。在以下情况会自动调用paint()方法:一:窗口最小化,再最大化。二:窗口的大小发生变化(注意是大小变化,
2、而不是移动窗口)三:repaint函数被调用:repaint():刷新组件的外观注意点:起到动感的作用。Graphics 类:Graphics 可以理解就是画笔,为我们提供各种绘制图形的方法:画直线drawLine(int x1,int y1,int x2,int y2);:画矩形边框drawRect(intx,inty,intwidth,int height);:画椭圆边框drawOval(intx,inty,intwidth,int height);:填充矩形fillRect(intx,inty,intwidth,int height);:填充椭圆fillOval(intx,inty,in
3、twidth,int height);:画图片drawImage(Image img,intx,int y,.);:画字符串drawString(String str,intx,int y);:设置画笔的字体setFont(Font font);:设置画笔的颜色setColor(Color c);举例如下:/* java绘图原理* 不能再JFrame上画图,但是可以在JPanel上画图*/package day0218;importjava.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Image
4、;import java.awt.Panel;import java.awt.Toolkit;importjavax.swing.JFrame;import javax.swing.JPanel;public class Demo18_1 extends JFrame MyPanelmp = null;public Demo18_1() mp=new MyPanel();this.add(mp);this.setSize(800, 800);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);pub
5、lic static void main(String args) Demo18_1 demo18_1=new Demo18_1();/ 定义一个MyPanel(是我自己的面板,是用于绘图和显示绘图的区域)class MyPanel extends JPanel / 覆盖JPanel的paint方法/ Graphics是绘图的重要类,你可以把他理解成一只画笔(可以画各种各样的)public void paint(Graphics g) / 调用父类函数完成初始化(这句话不能少,现在似乎可以不加,最好加上)super.paint(g);/ 画一个圆/g.drawOval(20, 20, 40,
6、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);/ /在面板上画出图片(要先准备张图片)/ Image im=Toolkit.getDefaultToolkit()
7、.getImage(Panel.class.getResource(/33.jpg);/ /显示图片 this指的是这里的JPanel/ g.drawImage(im, 90, 90, 356, 521, this); /设置画笔的颜色/g.setColor(Color.PINK);/g.setFont(new Font(华文琥珀, Font.BOLD, 55);/ /如何画字/g.drawString(林峰万岁, 100, 200);java事件处理机制采取的是“委派事件模型”,是指当事件发生(比如按了鼠标,按了键盘)的时候,产生事件的对象(即事件源),会把此信息传递给事件的监听者处理的一种
8、方式,而这里所说的信息实际上就是java.awt.evebt事件类库里某个类所创建的对象,我们暂时称之为事件的对象。小练习:点击不同的按钮,让面板的背景色发生相应的变化。代码如下:/* 讲解java中的事件处理机制* 理解:一个事件可以被多个类监听的* 一个类要实现监听的步骤* 1.实现相应的接口(KeyListener、MouseListener、ActionListener、WindowListener)* 2.把接口的处理方法根据需要重新编写(Override)* 3.在事件源注册监听* 4.时间传递是靠事件对象*/package day0218;importjava.awt.Borde
9、rLayout;import java.awt.Color;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;importjavax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;public class Shijian extends JFrame implements ActionListener private static final long serialVe
10、rsionUID = 1L;/ 定义JPaneljp = null;JButton jb1, jb2;publicShijian() jp = new JPanel();jb1 = new JButton(黑色);jb2 = new JButton(红色);this.add(jb1, BorderLayout.NORTH);jp.setBackground(Color.gray);this.add(jp);this.add(jb2, BorderLayout.SOUTH);Cat mycat = new Cat();/ 注册监听jb1.addActionListener(this);jb1.a
11、ddActionListener(mycat);/ 指定action命令jb1.setActionCommand(aa);jb2.addActionListener(this);jb2.setActionCommand(bb);this.setSize(300, 300);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);public static void main(String args) Shijiansj = new Shijian();Overridepublic void action
12、Performed(ActionEvent e) / 判断是哪个按钮被点击if (e.getActionCommand().equals(aa) /System.out.println(点击了黑色);jp.setBackground(Color.black); else if (e.getActionCommand().equals(bb) /System.out.println(点击了红色);jp.setBackground(Color.red);/ 若要让猫类监听,那么也要注册监听class Cat implements ActionListener Overridepublic void
13、 actionPerformed(ActionEvent arg0) / TODO Auto-generated method stubif (arg0.getActionCommand().equals(aa) System.out.println(猫猫也知道你按了黑色按钮); else if (arg0.getActionCommand().equals(bb) System.out.println(猫猫也知道你按了红色按钮);/ class MyPanel extends JPanel / public void paint(Graphics g) / super.paint(g);/
14、/ 小练习:怎么让小球受到键盘的控制,上下左右移动。代码如下:/* 加深对事件处理机制的理解* 通过上下左右键,来控制小球的位置* 我自我感觉是谁实现了监听的,就是在注册监听中被监听的*/package day0218;importjava.awt.Graphics;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;importjavax.swing.JFrame;import javax.swing.JPanel;public class Shijian2 extends JFrame MyPanelmp=null;pu
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1