首先我们讨论一下,为什么会需要重绘?
如果没有重绘,当我们将画板最小化,然后再最大化是,你会发现,画板上之前画的内容消失了,这是为什么呢?
1.你没有将你所化的内容存储起来,这里就需要我之前讲过的数组队列
2.当你把画板最小化,然后最大化时,相当于重新实例化了一个画布,而旧的画布则被Java中的垃圾回收机制所回收。
那我们如何实现重绘呢?
有几部我们要先做好:
1.先建立一个画板
2.要有一个数组队列(用上一篇中的数组队列即可)
3.图形抽象类类
4.具体图形类继承抽象类
5.图形的存储
一.布局:
我的xp画板用的是流式布局和边界布局还有网格布局,整体用的是流式,分为北,西,中,南。
而中部放有我的画布,在实现中部时我定义了一个函数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了,呵呵!!
相关推荐
在VS2015环境下,利用MFC框架实现的一款高仿“画图”工具,实现绝大部分功能甚至更多创新点。(注释超详细) 实现了点、直线、曲线、折线、矩形、圆形、多边形等等形状,并且具有区域限制、鼠标捕捉等功能;...
【标题】"仿windows的画板"是一款基于Visual Studio 2005的MFC应用程序,它模仿了Windows操作系统内置的画板工具,并在此基础上扩展了一些实用功能。这个项目旨在为用户提供一个类似系统画板的图形编辑环境,同时...
《深入探索XP系统自带画板》 XP操作系统中内置的画板工具,是许多用户初次接触数字绘画的起点。这个简单而实用的程序,虽然在功能上无法与专业级的图像编辑软件相比,但它的易用性和基础功能,使得它在日常生活中...
"易语言-易语言画板自绘"这个主题涉及到的是使用易语言来实现画板的自绘功能,即通过编程控制画板上的图形绘制,包括线条、形状、颜色填充等。下面我们将深入探讨易语言画板自绘的核心概念、实现原理以及相关的API...
【标题】"仿windows画板.zip"是一款基于C#编程语言开发的图形用户界面应用程序,模仿了Windows系统自带的画图工具。这个项目是大三学生的课程设计成果,旨在教授和实践C#语言以及图形界面设计的基本原理和技巧。 ...
易语言画板自绘源码,画板自绘,标尺子程序_绘制标尺刻度,恢复鼠标状态,无拖动时激活恢复,刻度区重绘,客户区重绘,二级缓冲绘制,客户区刷新,选中辅助线,高亮辅助线,拖动辅助线,客户绘制的图形,GetProp,SetRect,SetProp,...
易语言源码易语言画板自绘列表源码.rar 易语言源码易语言画板自绘列表源码.rar 易语言源码易语言画板自绘列表源码.rar 易语言源码易语言画板自绘列表源码.rar 易语言源码易语言画板自绘列表源码.rar 易语言源码...
在易语言中,"画板自绘按钮"是一个常见的编程实践,它涉及到用户界面(UI)的设计与交互,特别是自定义图形绘制和按钮的反馈事件处理。 在传统的GUI编程中,按钮通常由系统提供默认的样式和行为。然而,"画板自绘...
4. **内存位图**:为了提高效率和避免频繁的屏幕重绘,通常会使用内存位图来保存当前画板的状态。当需要更新画板时,将内存位图的内容复制到窗口上,而不是重新绘制所有图形。 5. **文本处理**:除了图形绘制,自绘...
易语言画板绘图与API绘图对比源码例程程序结合易语言应用接口支持库,通过调用DLL文件实现了2种不同的方法绘制动态线效果。本易语言例程源码是易语言论坛用户编写的教程,属于易语言图形图像教程。本易语言例程还...
《易语言画板自绘界面》是一个以易语言编程实现的图形用户界面(GUI)设计,它允许开发者自定义画布上的元素和交互方式。在本文中,我们将深入探讨这个项目涉及的关键知识点,并且详细解释如何利用易语言来创建一个...
《易语言画板自绘菜单》是一个专注于使用易语言实现画板应用中自定义绘制菜单功能的编程项目。在这个项目中,开发者通过源代码展示了如何在画板程序中创建并控制自绘菜单,以实现更加个性化和高效的操作界面。下面...
易语言源码易语言画板自绘界面源码.rar 易语言源码易语言画板自绘界面源码.rar 易语言源码易语言画板自绘界面源码.rar 易语言源码易语言画板自绘界面源码.rar 易语言源码易语言画板自绘界面源码.rar 易语言源码...
易语言源码易语言画板自绘菜单源码.rar 易语言源码易语言画板自绘菜单源码.rar 易语言源码易语言画板自绘菜单源码.rar 易语言源码易语言画板自绘菜单源码.rar 易语言源码易语言画板自绘菜单源码.rar 易语言源码...
易语言源码易语言画板自绘编辑框源码.rar 易语言源码易语言画板自绘编辑框源码.rar 易语言源码易语言画板自绘编辑框源码.rar 易语言源码易语言画板自绘编辑框源码.rar 易语言源码易语言画板自绘编辑框源码.rar ...
3. 事件响应:设置画板的绘图事件,如WM_PAINT消息,当需要更新画布时,调用绘制逻辑函数进行重绘。 4. 数据管理:存储列表项的数据结构,如数组或列表,用于驱动绘图逻辑。 5. 用户交互:处理鼠标和键盘事件,使...
易语言源码易语言画板自绘源码.rar 易语言源码易语言画板自绘源码.rar 易语言源码易语言画板自绘源码.rar 易语言源码易语言画板自绘源码.rar 易语言源码易语言画板自绘源码.rar 易语言源码易语言画板自绘源码....
易语言源码易语言画板自绘按钮源码.rar 易语言源码易语言画板自绘按钮源码.rar 易语言源码易语言画板自绘按钮源码.rar 易语言源码易语言画板自绘按钮源码.rar 易语言源码易语言画板自绘按钮源码.rar 易语言源码...
易语言源码易语言画板自绘列表框源码.rar 易语言源码易语言画板自绘列表框源码.rar 易语言源码易语言画板自绘列表框源码.rar 易语言源码易语言画板自绘列表框源码.rar 易语言源码易语言画板自绘列表框源码.rar ...
在这个“易语言画板自绘列表框”项目中,我们主要探讨的是如何利用易语言来实现一个自定义绘制的列表框组件。 列表框在图形用户界面(GUI)设计中扮演着重要角色,它允许用户从多个选项中选择一个或多个条目。在...