您的位置:首页 > 编程语言 > Java开发

JAVASE学习(15)绘图技术

2016-12-15 20:20 357 查看
绘图原理1:

Component类提供了两个和绘图相关最重要的方法:

1)paint(Graphics g)绘制组件的外观

2)repaint()刷新组件的外观

当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法来绘制组件。

绘图原理2:

在以下情况下paint()将会被调用

1)窗口最小化,在最大化

2)窗口的大小发生变化

3)repaint函数被调用

Graphics类

 


/*
* 功能:Java绘图原理
* */
package test1;

import javax.swing.*;
import java.awt.*;

public class Demo1 extends JFrame{
MyPanel mp=null;
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo1 demo1=new Demo1();
}
public Demo1() {
// TODO Auto-generated constructor stub
mp=new MyPanel();
this.add(mp);
this.setSize(700,500);
this.setLocation(600, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}

}
//定义一个MyPanel(我自己的面板,是用于绘图和现实绘图的区域)
class MyPanel extends JPanel{
//覆盖JPanel的paint方法
//Graphics是绘图的重要类,可以理解为一支画笔
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
//1.调用父类函数
super.paint(g);
System.out.println("调用paint");
//先画一个圆
//		g.drawOval(10, 10, 30, 30);
//画直线
//		g.drawLine(10, 10, 30, 10);
//画矩形
//		g.drawRect(40, 40, 50, 60);
//填充矩形
//设置颜色
//		g.setColor(Color.BLUE);
//		g.fillRect(10, 10, 50, 60);
//		g.setColor(Color.RED);
//		g.fillRect(70, 70, 50, 60);
//		在面板上画出图片
//		Image im=Toolkit.getDefaultToolkit().getImage
//				(Panel.class.getResource("/caocao.jpg"));
//		g.drawImage(im, 90, 90, 200, 150,this);
//如何画字
//		g.setColor(Color.red);
//		g.setFont(new Font("隶书",Font.BOLD,30));
//		g.drawString("爱我中华", 200, 300);

}

}






2)事件:

是承载事件源状态改变时的信息对象。事件是事件源向事件监听器传输事件源状态信息的载体。在用户与GUI组件进行交互时就会生成事件,比如当鼠标在面板中移动时,就会生成一个鼠标移动事件的对象,而这个对象保存着当前鼠标在面板中位置信息。java.awt.event包和javax.swing.event包中定义了各种事件类型,常见的事件类有:



3)事件监听器接口

事件源产生一个事件,可以传给事件监听者处理

事件监听者实际上就是一个类,该类实现了某个事件监听器接口,比如MyPanel就是一个类,它实现了ActionListener接口,它就可以作为一个事件监听者,对接受到的事件进行处理。

事件监听器接口有多种,不同的事件监听接口可以监听不同的事件,一个类可以实现一个事件监听接口,也可以实现多个监听接口。ava.awt.event包和javax.swing.event包中定义了各种事件监听接口,常见的事件监听接口有:



/*
* 功能:事件监听接口实现
* */

package com.test3;

import javax.swing.*;

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class Demo4 extends JFrame{
MyPanel mp=null;
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo4 demo4=new Demo4();
}
public Demo4() {
// TODO Auto-generated constructor stub
mp=new MyPanel();

this.add(mp);
//注册监听
this.addMouseListener(mp);

this.addKeyListener(mp);

this.addMouseMotionListener(mp);
this.addWindowListener(mp);
this.setSize(400,300);
this.setLocation(600, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
/*
* 1.让MyPanel知道鼠标按下的消息,并且知道点击的位置(x,y)
* 2.让MyPanel知道哪个键按下
* 3、让MyPanel知道鼠标移动,拖拽
* 4、让My知道窗口的变化(关闭、)
* */
class MyPanel extends JPanel implements MouseListener,KeyListener,MouseMotionListener,WindowListener{
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);

}
//1、鼠标点击
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标点击了x="+e.getX()+"y="+e.getY());
}
//2、鼠标移动到MyPanel
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标来了");
}
//3、鼠标离开MyPanel

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标离开了");
}
//4.鼠标按下
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub

}
//5.鼠标释放
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub

}
//键按下
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println(e.getKeyChar()+"被按下");
}
//键松开
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub

}
//键输入
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub

}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标当前坐标x="+e.getY());
}
//窗口激活
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("窗口重新打开");
}
//窗口在关闭
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("窗口关闭");
}
//	窗口最小化
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("窗口正在关闭");
}
//	窗口最小化
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("窗口最小化");

}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub

}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub

}
//窗口打开
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("窗口打开");

}
}

总结:事件编程步骤:

1)编写事件处理类(事件监听者)

2)根据需求给事件处理类实现监听器接口

3)在事件处理类重写(实现)其事件处理的函数

4)在事件源类中指定该事件的监听器(响应者)是谁,即注册监听

java事件处理机制:

总结:

1)java采用委托机制处理事件

2)java中的事件是分类的,比如对窗口事件、鼠标事件、按键事件、操作事件【按按钮】

3)java中的一个类要监听某个事件,则必须实现相应的事件监听接口

4)事件监听接口有多种,程序员应当针对不同的情况,实现不同的监听接口,比如监听鼠标事件就应当实现MouseListener;要监听键盘事件,就应当实现KeyListener



/*
* 功能:加深对事件处理机制的理解
* 1、通过上下左右键,来控制一个小球的位置
* */
package com.test2;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Demo3 extends JFrame{
MyPanel mp=null;
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo3 demo3=new Demo3();

}
public Demo3() {
// TODO Auto-generated constructor stub
mp=new MyPanel();

//mp加入到JFrame

this.add(mp);
this.addKeyListener(mp);
this.setSize(400,300);
this.setLocation(600, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
//定义自己的panel
class MyPanel extends JPanel implements KeyListener{
int x=10;
int y=10;
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
g.fillOval(x, y, 20, 20);
}
//键被按下
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
// System.out.println("键被按下"+(char)e.getKeyCode());
if(e.getKeyCode()==KeyEvent.VK_DOWN){
y+=3;
}else if(e.getKeyCode()==KeyEvent.VK_UP){
y-=3;
}else if(e.getKeyCode()==KeyEvent.VK_LEFT){
x-=3;
}else if(e.getKeyCode()==KeyEvent.VK_RIGHT){
x+=3;
}
//调用repaint()函数,来重绘界面
this.repaint();
}
//键被释放
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub

}
//键的一个值被输出
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}
}
/*
* 功能:事件监听接口实现
* */

package com.test3;

import javax.swing.*;

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class Demo4 extends JFrame{
MyPanel mp=null;
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo4 demo4=new Demo4();
}
public Demo4() {
// TODO Auto-generated constructor stub
mp=new MyPanel();

this.add(mp);
//注册监听
this.addMouseListener(mp);

this.addKeyListener(mp);

this.addMouseMotionListener(mp);
this.addWindowListener(mp);
this.setSize(400,300);
this.setLocation(600, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
/*
* 1.让MyPanel知道鼠标按下的消息,并且知道点击的位置(x,y)
* 2.让MyPanel知道哪个键按下
* 3、让MyPanel知道鼠标移动,拖拽
* 4、让My知道窗口的变化(关闭、)
* */
class MyPanel extends JPanel implements MouseListener,KeyListener,MouseMotionListener,WindowListener{
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);

}
//1、鼠标点击
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标点击了x="+e.getX()+"y="+e.getY());
}
//2、鼠标移动到MyPanel
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标来了");
}
//3、鼠标离开MyPanel

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标离开了");
}
//4.鼠标按下
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub

}
//5.鼠标释放
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub

}
//键按下
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println(e.getKeyChar()+"被按下");
}
//键松开
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub

}
//键输入
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub

}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标当前坐标x="+e.getY());
}
//窗口激活
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("窗口重新打开");
}
//窗口在关闭
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("窗口关闭");
}
//	窗口最小化
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("窗口正在关闭");
}
//	窗口最小化
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("窗口最小化");

}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub

}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub

}
//窗口打开
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("窗口打开");

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JAVASE JAVA