画图板重绘_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 画图板重绘

画图板重绘

 2013/10/19 12:47:42  wubin1004  程序员俱乐部  我要评论(0)
  • 摘要:画图板的重绘就是将我们在画布上所画的图形,在窗体发生变化后依然存在,这就要求我们将画过的图形保存下来,这个可以通过创建一个形状类,这个形状类是所有的形状的基类,也就是说具体的形状类,例如:直线类,矩形类。我们可以通过继承形状类来创建,在创建一个形状类的队列,这样我们就可以直接保存所画的图形,接下来就是重写paint方法,paint方法就是重绘的方法,但是我们要注意我们的画布Graphics对象是加在那个容器中的,如果是JFrame,就重写JFrame中的paint方法,如果是JPanel
  • 标签:画图 重绘

??????????? 画图板的重绘就是将我们在画布上所画的图形,在窗体发生变化后依然存在,这就要求我们将画过的图形保存下来,这个可以通过创建一个形状类,这个形状类是所有的形状的基类,也就是说具体的形状类,例如:直线类,矩形类。我们可以通过继承形状类来创建,在创建一个形状类的队列,这样我们就可以直接保存所画的图形,接下来就是重写paint方法,paint方法就是重绘的方法,但是我们要注意我们的画布Graphics对象是加在那个容器中的,如果是JFrame,就重写JFrame中的paint方法,如果是JPanel,就重写JPanel中的paint方法。

源代码:

class="java">界面代码:
package com.paint;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public  class GUI extends JFrame  {
	//属性
	private Graphics g;
	private ShapeList shapes=new ShapeList();
	//构造方法
	public GUI(){
		this.setTitle("画图板");
		this.setBounds(200,200,500,400);
		this.setDefaultCloseOperation(3);
		this.setLayout(new BorderLayout());
		//按钮面板
		JPanel jp_north=new JPanel();
		jp_north.setPreferredSize(new Dimension(500,100));
		//创建按钮面板的按钮并加监听器
		//形状按钮
		JButton jb_line=new JButton("LINE");
		JButton jb_rect=new JButton("RECT");
		JButton jb_oval=new JButton("OVAL");
		JButton jb_red=new JButton("RED");
		JButton jb_blue=new JButton("BLUE");
		JButton jb_green=new JButton("GREEN");
		JButton jb_colorchose=new JButton("CHOSE COLOR");
		Mylistener m1=new Mylistener();
		jb_line.addActionListener(m1);
		jb_rect.addActionListener(m1);
		jb_oval.addActionListener(m1);
		//颜色按钮
		Colorlistener color=new Colorlistener();
		jb_red.addActionListener(color);
		jb_blue.addActionListener(color);
		jb_green.addActionListener(color);
		jb_colorchose.addActionListener(color);
		//添加
		jp_north.add(jb_line);
		jp_north.add(jb_rect);
		jp_north.add(jb_oval);
		jp_north.add(jb_red);
		jp_north.add(jb_blue);
		jp_north.add(jb_green);
		jp_north.add(jb_colorchose);
		
		//画布面板
		MyJPanel jp_south=new MyJPanel(shapes);
		jp_south.setPreferredSize(new Dimension(500,300));
		jp_north.setBackground(Color.GREEN);
		//添加面板
		this.add(jp_north,BorderLayout.NORTH);
		this.add(jp_south,BorderLayout.SOUTH);
		this.setVisible(true);
		g=jp_south.getGraphics();
		Mymouselistener m=new Mymouselistener(g, m1,color,shapes);
		jp_south.addMouseListener(m);
		jp_south.addMouseMotionListener(m);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new GUI();
	}
}
按钮的监听器代码: 
?
package com.paint;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Mylistener implements ActionListener {
	private String type="LINE";
	public String gettype(){
		String s=type;
		return s;
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		type=e.getActionCommand();
	}

}

package com.paint;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JColorChooser;
import javax.swing.plaf.synth.ColorType;

public class Colorlistener implements ActionListener {
	private Color color=Color.black;
	public Color getcolor(){
		return color;
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		String colortype=e.getActionCommand();
		if(colortype.equals("RED")){
			color=Color.red;
		}else if(colortype.equals("GREEN")){
			color=Color.green;
		}else if(colortype.equals("BLUE")){
			color=Color.blue;
		}else if(colortype.equals("CHOSE COLOR")){
			color=JColorChooser.showDialog(null, "请选择颜色", Color.black);
		}
	}

}
?鼠标监听器: 
package com.paint;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Mymouselistener extends MouseAdapter {
	private Graphics g;
	private Mylistener m1;
	private Colorlistener color;
	private int x1,x2,x3,y1,y2,y3;
	private int tempx,tempy;
	private ShapeList shapes;
	public Mymouselistener(Graphics g,Mylistener m1,Colorlistener color,ShapeList shapes){
		this.shapes=shapes;
		this.g=g;
		this.m1=m1;
		this.color=color;
	}
	public void mousePressed(MouseEvent e) {
		x1=e.getX();
		y1=e.getY();
		tempx=x1;
		tempy=y1;
	}
	public void mouseReleased(MouseEvent e) {
		String command=m1.gettype();
		Color color1=color.getcolor();
		x2=e.getX();
		y2=e.getY();
		g.setColor(color1);
		NetJavaShape shape=new ImpLine(x1, y1, x2, y2, color1);
		if(command.equals("LINE")){
			shape=new ImpLine(x1, y1, x2, y2, color1);
		}else if(command.equals("RECT")){
			shape=new ImpRect(x1, y1, x2, y2, color1);
		}else if(command.equals("OVAL")){
			shape=new ImpOval(x1, y1, x2, y2, color1);
		}
		shape.draw(g);
		shapes.add(shape);
	}
	public void mouseDragged(MouseEvent e){
		x3=e.getX();
		y3=e.getY();
		String command=m1.gettype();
		Color color1=color.getcolor();
		if(command.equals("LINE")){
			g.setColor(Color.white);
			g.drawLine(x1, y1, tempx, tempy);
			g.setColor(color1);
			g.drawLine(x1, y1, x3, y3);
			tempx=x3;
			tempy=y3;
		}else if(command.equals("RECT")){
			g.setColor(Color.white);
			g.drawRect(Math.min(x1, tempx), Math.min(y1, tempy),Math.abs(x1-tempx),Math.abs(y1-tempy));
			g.setColor(color1);
			g.drawRect(Math.min(x1, x3), Math.min(y1, y3),Math.abs(x1-x3),Math.abs(y1-y3));
			tempx=x3;
			tempy=y3;
		}else if(command.equals("OVAL")){
			g.setColor(Color.white);
			g.drawOval(Math.min(x1, tempx), Math.min(y1, tempy),Math.abs(x1-tempx),Math.abs(y1-tempy));
			g.setColor(color1);
			g.drawOval(Math.min(x1, x3), Math.min(y1, y3),Math.abs(x1-x3),Math.abs(y1-y3));
			tempx=x3;
			tempy=y3;
		}
	}
}
?
package com.paint;

import java.awt.Color;
import java.awt.Graphics;

public class NetJavaShape {
	private Color color;
	private int x1,x2,y1,y2;
	//方法
	public void draw(Graphics g){
	}
}

package com.paint;

import java.awt.Color;
import java.awt.Graphics;

public class ImpLine extends NetJavaShape{
	private int x1,x2,y1,y2;
	private Color color;
	//构造方法
	public ImpLine(int x1,int y1,int x2,int y2,Color color){
		this.x1=x1;
		this.x2=x2;
		this.y1=y1;
		this.y2=y2;
		this.color=color;
	}
	//方法
	public void draw(Graphics g){
		g.setColor(color);
		g.drawLine(x1, y1, x2, y2);
	}

}

package com.paint;

import java.awt.Color;
import java.awt.Graphics;

public class ImpOval extends NetJavaShape {
	private int x1,x2,y1,y2;
	private Color color;
	//构造方法
	public ImpOval(int x1,int y1,int x2,int y2,Color color){
		this.x1=x1;
		this.x2=x2;
		this.y1=y1;
		this.y2=y2;
		this.color=color;
	}
	//方法
	public void draw(Graphics g){
		g.setColor(color);
		g.drawOval(Math.min(x1, x2), Math.min(y1, y2),Math.abs(x1-x2),Math.abs(y1-y2));
	}
}

import java.awt.Color;
import java.awt.Graphics;

public class ImpRect extends NetJavaShape {
	private int x1,x2,y1,y2;
	private Color color;


	public ImpRect(int x1,int y1,int x2,int y2,Color color){
	
		this.color=color;
		this.x1=x1;
		this.x2=x2;
		this.y1=y1;
		this.y2=y2;
		
	}
	
	public void draw(Graphics g){
		g.setColor(color);
		g.drawRect(Math.min(x2, x1), Math.min(y1, y2), Math.abs(x1-x2), Math.abs(y1-y2));

	}


}
?形状类的队列: 
package com.paint;
public class ShapeList {
	NetJavaShape[] src=new NetJavaShape[0];
	//添加
	public void add(NetJavaShape s){
		NetJavaShape[] agr=new NetJavaShape[src.length+1];
		agr[src.length]=s;
		for(int i=0;i<src.length;i++){
			agr[i]=src[i];
		}
		src=agr;
		
	}
	public NetJavaShape get(int index){
		NetJavaShape k=src[index];
		return k;
		
	}
	public int getsize(){
		int n=src.length;
		return n;
	}
}
?重绘paint: 
package com.paint;

import java.awt.Graphics;

import javax.swing.JPanel;

public class MyJPanel extends JPanel {
	private ShapeList shapes;
	public MyJPanel(ShapeList shapes){
		this.shapes=shapes;
	}
	@Override
	public void paint(Graphics g) {
		// TODO Auto-generated method stub
		super.paint(g);
		for(int i=0;i<shapes.getsize();i++){
			NetJavaShape shape=shapes.get(i);
			shape.draw(g);
		}
	}
}
?

?形状类以及它的几个具体行政的子类:

?

上一篇: QQ登录窗口 下一篇: 关于类继承
发表评论
用户名: 匿名