`
企鹅木白
  • 浏览: 32964 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

关于画图板的重绘

阅读更多
                  
大家在用JAVA制作画图板时有没有发现一个问题,就是当你在画布上画了一些图形,例如直线,矩形后,把窗体最小化后,在还原,画布上的图形就消失了。这就牵扯到一个画布重绘的问题。
这是因为调用Jpanel画布时,Graphics类里有一个写好了的paint方法是自动调用的,当你最小化窗体或者是改变窗体大小,都会调用paint方法把当前图片清空,所以我们要做的就是重写paint方法,使它在窗体最小化后重新绘制图像。
首先,我们要建立一个Object类的队列,用来存放我们每次画的图像,这个方法可以自己写,
//队列,用于解决画板的重绘
public class MyList {
private Object[] srcArray=new Object[0];
//添加一个元素的方法
  public Object[] getOb()
  {
  return srcArray;
  }
  public void add(Object obj)
  {
  //重新创建一个队列来代替原队列
  Object[] destarray=new Object[srcArray.length+1];
  for(int i=0;i<srcArray.length;i++)
  {
  destarray[i] = srcArray[i];
  }
  destarray[srcArray.length] = obj;
  //吧src的指针来指向dest
  srcArray  = destarray;
  }
这里只是添加了add方法来添加图像,其他方法大家可以自己试着写一写。
然后我们需要写一个shape类来定义我们画的图像,
public abstract class Shapes{
public int x1,x2,y1,y2;
public Color color;
/**
* 构造方法
*/
public Shapes(int x1, int y1,int x2,int y2,Color color)
{
this.x1=x1;
this.y1=y1;
this.x2=x2;
this.y2=y2;
this.color=color;
}
/**
* 抽象画图的的方法
*/
public abstract void draw(Graphics g);
}
这里shapes类我定义的是抽象类型的,就是没有实现的类,我们可以接下来定义Rect,Line等shapes类的子类来实现方法。
import java.awt.Color;
import java.awt.Graphics;
/**
* 矩形的重绘实现
* @author lenovo
*
*/
public class Rect extends Shapes{

public Rect(int x1, int y1, int x2, int y2, Color color) {
super(x1, y1, x2, y2, color);

}

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

}
这里只举了一个例子。剩下的大家可以自己写。
接下来我们在鼠标监听里把我们画的图像一个一个存进队列
if(command.equals("line"))
{
shape=new Line(x1,y1,x2,y2,jpanel_color.getJBcolor());
shape.draw(g);
//这里repaintList是我们创建的队列对象
repaintList.add(shape);
}
(这里同样只是一个例子)
监听实现后,我们就可以在重写paint方法了
  public void paint(Graphics g)
  {
  super.paint(g);
  //mouse_listener是鼠标监听器对象,从主类里接收过来
  mouse_listener = dw.getMouseListener();
  //然后创建队列来接受监听器的队列对象
  repaintList1=mouse_listener.repaintList;
  //这是鼠标移动监听器对象,也是一样的接收,
  mma = dw.getMouseMotionListener();
  repaintList2=mma.repaintList;
  //这里用一个for循环来一个个吧图像重绘出来
  for(int i=0;i<repaintList1.getLength();i++)
  {
  //队列是基类Object类型,我们把它强制转换成Shapes类
  ((Shapes) repaintList1.getSrc(i)).draw(g);

  }
  for(int i=0;i<repaintList2.getLength();i++)
  {
  //同样是重绘
  ((Shapes) repaintList2.getSrc(i)).draw(g);

  }
好了现在重绘就完成了。
分享到:
评论

相关推荐

    java画图板

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

    仿 XP 系统画图板

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

    简单画图板

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

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

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

    简易画图板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