JAVASE学习(15)绘图技术
2016-12-15 20:20
357 查看
绘图原理1:
Component类提供了两个和绘图相关最重要的方法:
1)paint(Graphics g)绘制组件的外观
2)repaint()刷新组件的外观
当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法来绘制组件。
绘图原理2:
在以下情况下paint()将会被调用
1)窗口最小化,在最大化
2)窗口的大小发生变化
3)repaint函数被调用
Graphics类
2)事件:
是承载事件源状态改变时的信息对象。事件是事件源向事件监听器传输事件源状态信息的载体。在用户与GUI组件进行交互时就会生成事件,比如当鼠标在面板中移动时,就会生成一个鼠标移动事件的对象,而这个对象保存着当前鼠标在面板中位置信息。java.awt.event包和javax.swing.event包中定义了各种事件类型,常见的事件类有:
3)事件监听器接口
事件源产生一个事件,可以传给事件监听者处理
事件监听者实际上就是一个类,该类实现了某个事件监听器接口,比如MyPanel就是一个类,它实现了ActionListener接口,它就可以作为一个事件监听者,对接受到的事件进行处理。
事件监听器接口有多种,不同的事件监听接口可以监听不同的事件,一个类可以实现一个事件监听接口,也可以实现多个监听接口。ava.awt.event包和javax.swing.event包中定义了各种事件监听接口,常见的事件监听接口有:
总结:事件编程步骤:
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
}
}
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("窗口打开"); } }
相关文章推荐
- swing学习二(绘图技术及原理)
- JavaSE入门学习15:Java面向对象之继承
- java web开发学习-15 EJB技术简介
- [置顶] JavaSE学习笔记_15:Java-Date类
- PHP学习笔记(15)PDO数据库操作+AJAX无刷新技术删除用户
- 现代web开发需要学习的15大技术
- Android学习随笔(15)------网络技术
- 二:UIKit与Quartz 2D绘图技术学习
- 现代Web开发需要学习的15大技术
- 【码云周刊第 15 期】都没闲着!Java 实现 URL 编解码技术,Python 进阶学习,码云提升安全性
- 跟我一起学习MySQL技术内幕(第五版):(第三章学习日记15)
- 【学习摘记】马士兵JDBC技术_课时15_JDBC处理可更新的结果集
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之15-数字、字符串和集合——黑马 IOS 技术博客
- JavaSE学习随笔(一) Cloneable接口源码分析与技术细节
- 学习笔记_JavaSE_15_对象数组、Collection、list
- javaSE学习15_引用类型数组的初始化
- [链接] Raid 技术学习, 红旗linux上的软raid
- java技术要学习的内容
- 无闪烁刷屏技术的实现如何提高绘图的效率
- 技术学习