`
wubin1004
  • 浏览: 4259 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

画图板重绘

    博客分类:
  • java
阅读更多

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

源代码:

界面代码:
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);
		}
	}
}
 

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

 

0
0
分享到:
评论

相关推荐

    java画图板

    Java简单swing程序,模拟实现windows画图板的功能,实现规则、不规则图形的绘制,颜色填充,撤销重绘等功能

    仿 XP 系统画图板

    一个简易的仿XP系统的画图板(JAVA),实现了大体的框架和一些简单的画图功能,以及整个画图板的重绘。界面很不错!

    BMP格式解析与保存 画图板的重绘

    NULL 博文链接:https://liuyuan418921673.iteye.com/blog/2283692

    简单画图板

    “关于‘画图板’”窗口 4.画橡皮、刷子、喷枪时可以选择画笔粗细 5.画矩形、圆角矩形时可以选择是否填充 6.改变指针的形状 7.光标进入绘图区域时实时显示光标坐标 8.撤销用户上一步绘画 9.改变主题 10.当...

    简易画图板1.2版本

    简易画图板的实现,有以下功能:铅笔,橡皮,直线,矩形,椭圆,圆角矩形,颜色面板,工具面板,重绘。

    我的画图板1.0

    可以重绘的画图板 博文链接:https://zhangchong2011.iteye.com/blog/907598

    MFC画图板 程序设计

    MFC课程设计简单的画图板 1.有一个看的过去的界面 2.画图板支持简单的文件读取存储也...3.支持重绘 4.橡皮筋(你懂得,画图形更方便) 上传文件时删掉了很多编译生成文件的(如果不能运行,可以自己贴一份到新建项目里)

    基于VC++MFC程序设计——简易画图板

    本软件是利用 VC++这个强大的可视化编程工具开发的,软件主要功能包括图 形的绘制、线型的设置、颜色的设置,图形文件的重绘和保存等功能。 本文介绍了如何完成上述功能,同时详细阐述了画图系统的实现过程以及对 ...

    基于Win32API设计画图板

    Windows下的Win32Application...如何在显示器上显示出自绘完成的各种图标,图像、图画等信息,都是在windons下实现的,所以,本次程序的重中之重是对windons编程要比较的熟练。根据具体的类或对象,做出不同的编码。

    类似画图板的小程序-windows

    另外为了避免屏幕的闪烁,程序中做了两个处理:一、把视图自己的重绘背景代码屏蔽掉,即响应视图的WM_ERASEBKGND消息,直接返回TRUE,并在Ondraw中程序自己绘制背景就可以了;二,在Ondraw中绘制的时候,先绘制到...

    mfc 画图板 程序文档

    3.2. SetROP2实现重绘 6 3.3. 嵌套View实现画布 6 3.4. 鼠标靠近目标时突出显示 7 3.4.1. 判断一点是否属于矩形HStrokeRect 7 3.4.2. 判断一点是否属于线段 8 3.4.3. 判断一点是否属于椭圆 8 3.5. 文档序列化 9 3.6....

    用c#实现画图功能,可以画出各种图形,如矩形,圆形,菱形等,还可以随意拖动,放大缩小

    用c#实现画图功能,可以画出各种图形,如矩形,圆形,菱形等,还可以随意拖动,放大缩小

    MFC绘图板实现所有你想到的功能

    绘制图形, 颜色填充, 画布大小设置 ,文本输入及修改文字属性 ,线条类型, 皮肤包 , 画刷 , 保存重绘, PPT演示。 所有上述功能全部实现,工具栏也已经制作了不同风格的图标。

    MFC实现高仿画板、绘图软件功能(带详细注释)

    在VS2015环境下,利用MFC框架实现的一款高仿“画图”工具,实现绝大部分功能甚至更多创新点。(注释超详细) 实现了点、直线、曲线、折线、矩形、圆形、多边形等等形状,并且具有区域限制、鼠标捕捉等功能; 实现了...

    win32完成画图小程序

    win32实现画图小程序,主要功能:画直线、矩形、椭圆,曲线,画板清除,重绘,颜色选择,工具选择,调色板和工具栏的隐藏和显示,调色板的停靠,文件保存和打开

    MFC绘图小程序源代码

    MFC架构设计的绘图板小程序 只附上了源代码还有可执行文件 可以重绘、撤销、橡皮擦这些操作,通过调用重绘函数ondraw实现,有兴趣的请下载看看。

    Android studio 画画板程序app毕业设计基于java的画板应用画删改色运行封面(包含源代码+设计报告+运行视频)

    保存其画笔路径,撤销时删除上一步操作,调用重绘来实现。5.保存绘图模块。先在本地的文件夹上创建一个文件 默认创建的是/sdcard/Pictures/由于文件的名字是不能重复的,采用通过当前时间来命名yyyy_MM_dd_HH_mm_ss....

    mfc期末作业

    单击“圆形”、“矩形”和“三角形”菜单项时,系统在“画图”菜单后建立一个相应的动态菜单,菜单中包括“绘制图形”、“移动图形”、“放大”、“缩小”、“重绘”等选项。当单击“绘制图形”时,利用“右箭头”键...

    Java绘制不规则图形的源代码.rar

    Java绘制不规则图形的源代码,类似于一个Java小画板,可以画出一些基于线条的图形,比如曲线,直线,还可用来写字,示例截图如上图所示。以下是相关源代码:  protected void ... //重绘组件   }  }

Global site tag (gtag.js) - Google Analytics