`

仿xp画板的重绘

 
阅读更多

          首先我们讨论一下,为什么会需要重绘?

          如果没有重绘,当我们将画板最小化,然后再最大化是,你会发现,画板上之前画的内容消失了,这是为什么呢?

         1.你没有将你所化的内容存储起来,这里就需要我之前讲过的数组队列

         2.当你把画板最小化,然后最大化时,相当于重新实例化了一个画布,而旧的画布则被Java中的垃圾回收机制所回收。

         

          那我们如何实现重绘呢?

          有几部我们要先做好:

          1.先建立一个画板

          2.要有一个数组队列(用上一篇中的数组队列即可)

          3.图形抽象类类

          4.具体图形类继承抽象类

          5.图形的存储

 

一.布局:

        我的xp画板用的是流式布局和边界布局还有网格布局,整体用的是流式,分为北,西,中,南。

        而中部放有我的画布,在实现中部时我定义了一个函数create_centerjpanel();而重绘的调用即用匿名内部类的方式的,代码如下:

写道
private JPanel create_centerjpanel() {
// 实例化一个底层面板
JPanel jp = new JPanel() {
public void paint(Graphics g) {
// 首先要调用父类的构造方法
super.paint(g);
for (int i = 0; i < Xp_drawListener.list.size(); i++) {
// 实例化一个shape对象并调用子类的draw方法,获取链表的内容并调用draw
Shape s = Xp_drawListener.list.get(i);
s.draw(g);
}
}
};
jp.setBackground(Color.gray);
jp.setLayout(new FlowLayout(FlowLayout.LEFT));

JPanel jp1 = new JPanel();
jp1.setPreferredSize(new Dimension(500, 400));
jp1.setBackground(Color.white);

jp.add(jp1);

this.add(jp, BorderLayout.CENTER);

// 添加中部面板的监听

return jp1;

}

 通过这种方式,当每次实例化JPane 时,都会使用匿名内部类重绘我存在list数组中的内容

 

       而画板我简单的实现了画笔,橡皮,画直线,矩形,椭圆,圆,圆矩形,填充等功能。此时我们对每一个图形都需要一个图形类来分别对每一个类的具体怎么画进行定义,这也就是为什么我没有用一个类来实现,而是退而求其次用不同的图形类继承抽象类,来共用公有的属性和方法。

       而当我们写子类的时候要注意,子类的构造方法要含有父类的构造方法的参数。

       一下我附上部分功能的代码:

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;


public class ShapeRoundRect extends Shape{
 
        	public ShapeRoundRect(int x1, int x2, int y1, int y2,  Color color,int width) {
        		super(x1, y1, x2, y2,color, width);
        		// TODO Auto-generated constructor stub
        	}

			@Override
			public void draw(Graphics g) {
				//设置颜色
				g.setColor(getColor());
				//强制转换成子类的对象
				Graphics2D g2 = (Graphics2D)g;
				g2.setStroke(new BasicStroke(this.getWidth()));
				System.out.println("圆角矩形");
				g.drawRoundRect(getX1(), getY1(),getX2()-getX1(),getY2()-getY1(),15, 15);
				
			}
}

 

      画笔的方法挺巧妙的,分享一下:

     x2 = e.getX();
     y2= e.getY();
     g.drawLine(x1, y1, x2, y2);
     x1 = x2;
     y1 = y2;

简简单单的5行代码实现画笔,感觉老NB了,呵呵!!

 

 

  • 大小: 49.8 KB
分享到:
评论

相关推荐

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

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

    e语言-易语言画板自绘

    易语言画板自绘源码例程程序调用API函数实现画板自绘效果。点评:易语言画板自绘源码关键是图层的定义和数据记录,明白原理后,可使用GDI等绘制。

    易语言画板自绘

    易语言画板自绘源码,画板自绘,标尺子程序_绘制标尺刻度,恢复鼠标状态,无拖动时激活恢复,刻度区重绘,客户区重绘,二级缓冲绘制,客户区刷新,选中辅助线,高亮辅助线,拖动辅助线,客户绘制的图形,GetProp,SetRect,SetProp,...

    易语言画板自绘菜单

    易语言画板自绘菜单源码,画板自绘菜单,取主菜单索引,画焦点,透明窗口,设置窗口信息,SetForegroundWindow,dll_取坐标窗口句柄

    易语言源码易语言画板自绘列表源码.rar

    易语言源码易语言画板自绘列表源码.rar 易语言源码易语言画板自绘列表源码.rar 易语言源码易语言画板自绘列表源码.rar 易语言源码易语言画板自绘列表源码.rar 易语言源码易语言画板自绘列表源码.rar 易语言源码...

    易语言画板自绘按钮

    易语言画板自绘按钮源码,画板自绘按钮,按钮反馈事件,画图形

    仿windows的画板

    Visual Studio 2005(MFC)仿windows系统自带的画板,在其基础上有添加了一些功能,如复制粘贴移动等。

    易语言画板自绘编辑框

    易语言画板自绘编辑框源码,画板自绘编辑框

    Java实现画板(Java小程序 模仿Win系统画板)

    Java小程序——模仿Win系统画板 使用Java实现Windows操作系统的高仿小画板。

    易语言画板绘图与API绘图对比源码

    易语言画板绘图与API绘图对比源码例程程序结合易语言应用接口支持库,通过调用DLL文件实现了2种不同的方法绘制动态线效果。本易语言例程源码是易语言论坛用户编写的教程,属于易语言图形图像教程。本易语言例程还...

    XP自带画板

    XP自带的画板 解压既可用

    易语言画板自绘列表框

    易语言画板自绘列表框源码,画板自绘列表框,重画列表,取现行选中项,加入表项,取现行选中项备注

    易语言源码易语言画板自绘界面源码.rar

    易语言源码易语言画板自绘界面源码.rar 易语言源码易语言画板自绘界面源码.rar 易语言源码易语言画板自绘界面源码.rar 易语言源码易语言画板自绘界面源码.rar 易语言源码易语言画板自绘界面源码.rar 易语言源码...

    易语言源码易语言画板自绘菜单源码.rar

    易语言源码易语言画板自绘菜单源码.rar 易语言源码易语言画板自绘菜单源码.rar 易语言源码易语言画板自绘菜单源码.rar 易语言源码易语言画板自绘菜单源码.rar 易语言源码易语言画板自绘菜单源码.rar 易语言源码...

    易语言源码易语言画板自绘编辑框源码.rar

    易语言源码易语言画板自绘编辑框源码.rar 易语言源码易语言画板自绘编辑框源码.rar 易语言源码易语言画板自绘编辑框源码.rar 易语言源码易语言画板自绘编辑框源码.rar 易语言源码易语言画板自绘编辑框源码.rar ...

    易语言源码易语言画板自绘源码.rar

    易语言源码易语言画板自绘源码.rar 易语言源码易语言画板自绘源码.rar 易语言源码易语言画板自绘源码.rar 易语言源码易语言画板自绘源码.rar 易语言源码易语言画板自绘源码.rar 易语言源码易语言画板自绘源码....

    易语言源码易语言画板自绘按钮源码.rar

    易语言源码易语言画板自绘按钮源码.rar 易语言源码易语言画板自绘按钮源码.rar 易语言源码易语言画板自绘按钮源码.rar 易语言源码易语言画板自绘按钮源码.rar 易语言源码易语言画板自绘按钮源码.rar 易语言源码...

    易语言画板自绘列表

    易语言画板自绘列表源码,画板自绘列表,重画,挂接,置行高,进度,取表项数,插入项目,更新进度,取选中项,删除表项,取项名称,取项软件大小

    易语言画板自绘界面

    易语言画板自绘界面源码,画板自绘界面,绘制_界面,绘制_标签,鼠标位置被移动事件,鼠标左键被按下事件,内部按钮

    仿windows画板.zip

    本人大三的课程设计,采用c#,可以运行(包含详细课程设计文档) 功能:可以实现绘制椭圆、直线,有铅笔、橡皮、填充桶、颜色选取工具,能实现文件打开、保存,能编辑颜色等基本功能

Global site tag (gtag.js) - Google Analytics