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

画图板与重绘

    博客分类:
  • java
阅读更多
    在逐渐的了解了java后,我们开使通过编写画图板,来更加深入的认识和学习java编程。
在开始写画图板时以为能写的和windows中的画图板一样,后来才知道我想多了。我们所要实现的画图板,只是在面板上能够选择图形和颜色,然后画出自己想要的图形。
(一)
    要想实现画图板我们首先要能够生成一个面板。
//创建窗体
javax.swing.JFrame jf=new javax.swing.JFrame("QQ2014");

    创建了窗体后,我们还可以对其大小,位置,标题,以及布局进行设置
                //设置窗体的大小
		jf.setSize(200, 200);
		//设置窗体的位置
		jf.setLocationRelativeTo(null);
		//设置完全关闭
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//设置流式布局
		jf.setLayout(new FlowLayout());

     最后我们还要把窗体显示在屏幕上
		//显示窗体
		jf.setVisible(true);

    这样,一个窗体创建完成。
(二)
    我们还要在窗体上添加按钮,来实现不同颜色和形状的实现。
    首先,我们还要先创建一个按钮
		javax.swing.JButton jb_start=new javax.swing.JButton("登录");

    创建完成后,还要添加到面板上
                //将组件添加到窗口
                jf.add(lab_pas);

    实现了按钮的添加,我们还要给按钮添加监听器。用来实现具体的动作。创建监听器,首先要先创建一个监听器类,并且要继承所要实现的监听器。如:
public class DrawListener extends java.awt.event.MouseAdapter{

    在继承后,要实现监听器中所有的功能。
    在创建了监听器类后,还要在主函数中创建一个监听器对象,但如何把动作传给监听器,这就需要构造函数了
	//构造函数
	public DrawListener(Graphics gr,ShapeListener slis,ColorListener clis){
		this.gr=gr;
		this.slis=slis;
		this.clis=clis;
	}

		// 建立鼠标监听器对象
		DrawListener mouse = new DrawListener(g, slis,clis);

    这样就实现了监听器的实现。我们所要实现的形状和颜色的按钮都是大同小异的。
(三)
    即使我们获取了窗口,添加了按钮,我们仍旧不能在面板上画出图形,以为我们所获取的窗体是不可以改变颜色的。要想改变颜色,我们还需要获取画布,其目的就是是我们所获取的面板可以改变颜色。
		// 获取画布
		java.awt.Graphics g = jp_south.getGraphics();

    这样我们就可以在这块画布上画出自己想要的图形了。
(四)
    我们在完成了所有的工作后,当我们将窗体最小化后再大化,或者将窗体大小改变后,发现自己所绘制的图形不见了。这是因为我们在将窗体大小改变或小化后,窗体会从内存中取出来重绘,但我们所画的图形并没有保存在内存中,所以并不会重绘图形,从而我们的图形会消失。
    要想实现图形的重绘,就要先将我们所绘制的图形保存起来。我们首先需要创建一个图形类。里面包含图形的基本要素。
public class Myshape {
	//声明图形基本元素
	private int x1;
	private int x2;
	private int y1;
	private int y2;
	private Color color;
	private String type;
}

    图形类中还要包含获取坐标以及设置坐标的方法。
    然后创建图形类的对象,我们可以用数组来实现也可以用队列来实现。没画完一个图形就将我们所绘制的图形的坐标、颜色等信息保存到数组中
                Myshape shape=new Myshape();
	    	shape.setX1(x1);
	    	shape.setY1(y1);
	    	shape.setX2(x2);
	    	shape.setY2(y2);
	    	shape.setColor(clis.getColor());
	    	shape.setType(type);
	    	//将图形保存到数组中
	    	if(count<shapearray.length){
	    		
	    		shapearray[count]=shape;
	    		count++;
	    	}

    在保存完后,我们还需要将图形重绘,实现重绘我们首先需要创建一个Mypanel类,用来继承JPanel类。在Mypanel类中实现窗体及图形的重绘。
public class Mypanel extends JPanel{
	
	public void paint(Graphics g){
		//重绘窗体
		super.paint(g);
		
		for(int i=0;i<DrawListener.count;i++){
			
			DrawListener.shapearray[i].draw(g);
		}
		
	}

}

    最后我们就实现了窗体的重绘功能。









   
分享到:
评论

相关推荐

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

    在本文中,我们将深入探讨BMP格式的解析与保存,并结合画图板的重绘功能来讲解这一主题。 首先,我们需要理解BMP文件的结构。BMP文件分为两部分:文件头和图像数据。文件头包含文件信息,如文件大小、图像宽度、...

    Java画图板应用

    通过重写paintComponent方法,可以确保每次窗口重绘时都能正确显示当前的绘图状态。 对于保存和加载功能,Java提供了文件I/O流类,如FileInputStream和FileOutputStream,用于读写文件。图像数据可以被序列化为二...

    QTcreator写画图板

    paintEvent是一个在QWidget中定义的事件处理函数,当组件需要重绘时,它会自动被调用。在绘图应用中,这个函数通常会被用来绘制图像。 #### QImage与QPainter QImage是一个图像表示类,用于处理图像数据。QPainter...

    C# 画图板 源码

    在C#编程环境中,开发一个画图板是一个常见的练习,用于学习图形用户界面(GUI)设计和绘图操作。这个“C# 画图板 源码”项目,适用于.NET Framework 1.1和2.0,展示了如何利用C#语言实现一个基本的绘画应用程序。...

    vc画图板源码

    2. 绘图处理:在OnPaint()消息处理函数中,当窗口需要重绘时,会调用BeginPaint()和EndPaint()来获取CDC对象,并在其中进行绘图操作。 3. 用户交互:程序需要响应用户的鼠标和键盘事件,如WM_LBUTTONDOWN、WM_...

    Java简易画图板

    9. **文件保存与加载**:一个完整的画图板应用通常会提供保存和加载功能,这需要序列化和反序列化当前的绘图状态,可能以图像文件(如PNG或JPEG)或自定义格式存储。 总的来说,"Java简易画图板"项目涵盖了Java GUI...

    简单画图板的设计

    10. **性能优化**:对于大规模的绘图操作,可能需要关注性能优化,如减少不必要的重绘,利用缓存技术提高效率,或者采用异步处理以避免阻塞用户界面。 以上就是关于"简单画图板的设计"的一些核心知识点。实际实现时...

    MFC做的画图板

    这个函数会在视图需要重绘时被调用,我们可以在这里使用GDI (Graphics Device Interface) 来绘制图形。GDI 提供了一系列的函数,如MoveTo、LineTo、Rectangle、Ellipse 和Polyline,它们分别用于绘制线条、矩形、...

    MFC简单画图程序,重绘,点,线,矩形,椭圆,拖拽预览

    在这个程序中,我们将实现基本的绘图功能,包括重绘、绘制点、线、矩形和椭圆,并支持拖拽预览以及填充色和画笔颜色的选择。 首先,我们需要创建一个MFC对话框应用程序。在Visual Studio中,选择"File" -&gt; "New" -&gt;...

    virtual c++6.o mfc简易画图板

    《VC++ 6.0 MFC简易画图板:实现与技术详解》 在软件开发领域,Microsoft Visual C++ 6.0(简称VC++ 6.0)是一款经典的集成开发环境,它提供了强大的MFC(Microsoft Foundation Classes)库,方便开发者构建Windows...

    VC++实现简单的画图板程序

    你需要定义消息映射来处理特定的消息,如WM_PAINT消息用于窗口重绘,WM_LBUTTONDOWN和WM_LBUTTONUP用于处理鼠标点击。 7. **文件I/O**:为了实现打开和保存BMP文件的功能,你需要使用CFile类或者更高级的fstream来...

    C#的简单画图板源码

    在C#编程环境中,开发一个简单的画图板是一项常见的练习,可以帮助初学者更好地理解图形用户界面(GUI)的创建和事件处理。这个源码提供了一个基础的画图应用,允许用户绘制矩形、曲线和椭圆,并且可以选择系统提供...

    c#画图板的简单实现,看看

    6. **擦除与重绘**: 为了实现擦除功能,可以创建一个白色的Pen,然后在擦除区域调用DrawRectangle方法。但请注意,Windows Forms的Graphics对象通常不会自动清除画布,所以可能需要在Paint事件中实现自己的清除...

    仿 XP 系统画图板

    4. **重绘机制**:为了保证画图板的实时性,开发者可能利用了JAVA的重绘机制,如`repaint()`方法,当画布上的内容发生变化时,会自动调用该方法进行更新,确保用户能即时看到画图的效果。 5. **图像处理**:除了...

    java画图板

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

    VC++6.0画图板

    5. **OnPaint消息**:当窗口需要重绘时,Windows会发送WM_PAINT消息。我们需要重载CWnd的OnPaint成员函数,来实现自定义的绘图逻辑。 6. **CPaintDC类**:为了在窗口上绘图,我们将使用CPaintDC类,它是设备上下文...

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

    通过对图形绘制、线型设置、颜色设置、图形文件重绘与保存等功能的介绍,不仅实现了基础的绘图需求,还进行了功能性的扩展,增加了软件的实用性和稳定性。此外,文章还探讨了如何设计用户友好的界面以及如何优化绘图...

    MFC 画图板完整源码

    这个函数会在窗口需要重绘时被调用,开发者可以在这里实现各种绘图逻辑。例如,用户可能会使用鼠标进行绘制,程序需要捕获WM_MOUSEMOVE和WM_LBUTTONDOWN等消息,根据鼠标的当前位置在画布上添加线条或形状。 此外,...

    android画图板

    在Android平台上,开发一个画图板应用是一项有趣的挑战,它涉及到图形用户界面(GUI)设计、触摸事件处理以及图像操作等多个技术领域。"android画图板"是一个典型的例子,它为用户提供了一个可以自由绘画、擦除、...

Global site tag (gtag.js) - Google Analytics