画图板的重绘就是将我们在画布上所画的图形,在窗体发生变化后依然存在,这就要求我们将画过的图形保存下来,这个可以通过创建一个形状类,这个形状类是所有的形状的基类,也就是说具体的形状类,例如:直线类,矩形类。我们可以通过继承形状类来创建,在创建一个形状类的队列,这样我们就可以直接保存所画的图形,接下来就是重写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); } } }
形状类以及它的几个具体行政的子类:
相关推荐
Java简单swing程序,模拟实现windows画图板的功能,实现规则、不规则图形的绘制,颜色填充,撤销重绘等功能
一个简易的仿XP系统的画图板(JAVA),实现了大体的框架和一些简单的画图功能,以及整个画图板的重绘。界面很不错!
NULL 博文链接:https://liuyuan418921673.iteye.com/blog/2283692
“关于‘画图板’”窗口 4.画橡皮、刷子、喷枪时可以选择画笔粗细 5.画矩形、圆角矩形时可以选择是否填充 6.改变指针的形状 7.光标进入绘图区域时实时显示光标坐标 8.撤销用户上一步绘画 9.改变主题 10.当...
简易画图板的实现,有以下功能:铅笔,橡皮,直线,矩形,椭圆,圆角矩形,颜色面板,工具面板,重绘。
可以重绘的画图板 博文链接:https://zhangchong2011.iteye.com/blog/907598
MFC课程设计简单的画图板 1.有一个看的过去的界面 2.画图板支持简单的文件读取存储也...3.支持重绘 4.橡皮筋(你懂得,画图形更方便) 上传文件时删掉了很多编译生成文件的(如果不能运行,可以自己贴一份到新建项目里)
本软件是利用 VC++这个强大的可视化编程工具开发的,软件主要功能包括图 形的绘制、线型的设置、颜色的设置,图形文件的重绘和保存等功能。 本文介绍了如何完成上述功能,同时详细阐述了画图系统的实现过程以及对 ...
Windows下的Win32Application...如何在显示器上显示出自绘完成的各种图标,图像、图画等信息,都是在windons下实现的,所以,本次程序的重中之重是对windons编程要比较的熟练。根据具体的类或对象,做出不同的编码。
另外为了避免屏幕的闪烁,程序中做了两个处理:一、把视图自己的重绘背景代码屏蔽掉,即响应视图的WM_ERASEBKGND消息,直接返回TRUE,并在Ondraw中程序自己绘制背景就可以了;二,在Ondraw中绘制的时候,先绘制到...
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#实现画图功能,可以画出各种图形,如矩形,圆形,菱形等,还可以随意拖动,放大缩小
绘制图形, 颜色填充, 画布大小设置 ,文本输入及修改文字属性 ,线条类型, 皮肤包 , 画刷 , 保存重绘, PPT演示。 所有上述功能全部实现,工具栏也已经制作了不同风格的图标。
在VS2015环境下,利用MFC框架实现的一款高仿“画图”工具,实现绝大部分功能甚至更多创新点。(注释超详细) 实现了点、直线、曲线、折线、矩形、圆形、多边形等等形状,并且具有区域限制、鼠标捕捉等功能; 实现了...
win32实现画图小程序,主要功能:画直线、矩形、椭圆,曲线,画板清除,重绘,颜色选择,工具选择,调色板和工具栏的隐藏和显示,调色板的停靠,文件保存和打开
MFC架构设计的绘图板小程序 只附上了源代码还有可执行文件 可以重绘、撤销、橡皮擦这些操作,通过调用重绘函数ondraw实现,有兴趣的请下载看看。
保存其画笔路径,撤销时删除上一步操作,调用重绘来实现。5.保存绘图模块。先在本地的文件夹上创建一个文件 默认创建的是/sdcard/Pictures/由于文件的名字是不能重复的,采用通过当前时间来命名yyyy_MM_dd_HH_mm_ss....
单击“圆形”、“矩形”和“三角形”菜单项时,系统在“画图”菜单后建立一个相应的动态菜单,菜单中包括“绘制图形”、“移动图形”、“放大”、“缩小”、“重绘”等选项。当单击“绘制图形”时,利用“右箭头”键...
Java绘制不规则图形的源代码,类似于一个Java小画板,可以画出一些基于线条的图形,比如曲线,直线,还可用来写字,示例截图如上图所示。以下是相关源代码: protected void ... //重绘组件 } }