`
NX
  • 浏览: 12223 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论
  • smartan: 话说这就是所谓的以时间换空间吧
    队列
  • NX: 是的,真心感谢各位提出的意见和建议,我也在修改代码,主要是在怎 ...
    队列
  • xchd: 队列不是先进先出吗?好像没有体现这点。
    队列
  • kidding87: 你这里应该和jdk学习下,动态的容量,怎么去扩容,你这里效率非 ...
    队列

重绘

阅读更多
  在画图板上画出一些图形后,如果最小化窗体,然后再将其最大化时,之前的图形会消失,为了使得之前的图形不消失,我们需要重载父类JFrame中的paint()方法,通过数组保存之前图形的相关数据在内存里,等到调用子类中paint()方法时取出数据实现重绘。
代码:
package com20130320;
import java.awt.FlowLayout; 
import java.awt.Graphics; 
 
import javax.swing.JFrame; 
 
//继承JFrame类 
public class ReDraw extends JFrame{ 
//声明一个DrawShape类类型的数组
    MyShape[] sp;
   
    //一般不将长代码写在主函数中
    public static void main(String args[]){ 
        ReDraw re=new ReDraw(); 
        re.showInfo(); 
    } 
  
    
    public void showInfo(){ 
        //创建一个固定大小的窗体
        this.setSize(600,600); 
        this.setResizable(false);
        this.setDefaultCloseOperation(3);
        this.setVisible(true); 
        //得到画布对象
        Graphics gr=this.getGraphics(); 
       
        //创建鼠标监听器
       MyMouseListener lis=new MyMouseListener();
        this.addMouseListener(lis);
        //让监听器中的画布对象g指向gr的内存地址
        lis.g=gr;
        //让在ReDraw类中的数组指向在DrawListener中的数组地址
        sp=lis.a; 
                 
         
        } 
   
    //重载父类中的paint()
    public void paint(Graphics g){ 
    //调用父类中的paint()
        super.paint(g); 
         show(g);
        }
   
   
    public void show(Graphics g){
    System.out.println("执行了重绘");
   
        for(int i=0;i<sp.length;i++){ 
        MyShape ds=new MyShape();
            ds=sp[i];
            //判断ds是否为空
            if(ds!=null){ 
            g.drawOval(ds.x, ds.y, ds.w, ds.h); 
            } 
    }
         
    }    
}



package com20130320;
import java.awt.Graphics; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 


public class MyMouseListener implements MouseListener{ 
   Graphics g; 
   int count=0; 
    //定义一个MyShape类的数组
   MyShape [] a=new MyShape[100]; 
     //(x1,y1)为点击点的坐标
   int x1,y1;   
        
   
   public void mouseClicked(MouseEvent e) { 
  MyShape ds=new MyShape(); 
        x1=e.getX(); 
        y1=e.getY(); 
       
        ds.x=x1; 
        ds.y=y1; 
        ds.w=50;
        ds.h=50;
        //将数据存入
        a[count]=ds; 
        count++; 
        System.out.println(count);
        g.drawOval(x1,y1,50,50);    
        
   } 


   public void mousePressed(MouseEvent e) {       
   } 
    
   public void mouseReleased(MouseEvent e) { 
   }
    
   public void mouseEntered(MouseEvent e) {        
   }

   public void mouseExited(MouseEvent e) {      
   } 





package com20130320;

public class MyShape { 
//定义MyShape类的属性
   public int x; 
   public int y; 
   public int w;
   public int h;
}
0
6
分享到:
评论

相关推荐

    MFC普通窗口重绘

    本文将深入探讨MFC中的“普通窗口重绘”这一关键知识点,包括重绘的原因、过程以及如何在MFC应用中实现窗口重绘。 首先,窗口重绘是一个常见的需求,它通常发生在以下几种情况:窗口被其他窗口覆盖后暴露出来,窗口...

    MFC 基本常用控件重绘

    在本文中,我们将深入探讨如何在MFC中重绘常见的控件,包括ListCtrl、Edit和ComboBox,这些都是Windows应用程序开发中的关键组件。 **ListCtrl控件** ListCtrl是一种多功能控件,它可以显示多列数据,类似于电子...

    Mfc实现Edit重绘

    为了增强Edit控件的视觉效果和交互性,我们有时需要对其进行自定义重绘,使其符合特定的设计需求。本文将深入探讨如何在MFC中实现Edit控件的重绘,包括编辑框的边框处理、文字居中、非客户区与客户区的绘制,以及...

    Duilib 控件重绘教程附带例子

    本教程将重点讲解如何在Duilib中进行控件的重绘,以实现自定义的视觉效果。 控件重绘是Duilib中实现界面个性化的重要手段。通过重绘,我们可以改变控件的默认外观,比如修改边框样式、调整颜色、添加图案或者动画...

    MFC CListCtrl重绘,功能全

    在某些情况下,为了实现更复杂或个性化的界面效果,我们可能需要对CListCtrl进行重绘。本篇将深入探讨CListCtrl的重绘机制和如何实现全面的功能。 首先,理解CListCtrl的绘制过程至关重要。CListCtrl默认使用...

    winform gdi+重绘窗体 控件

    本文将深入探讨如何使用C#和GDI+来实现Winform窗体及控件的重绘功能,包括button、listbox、checkbox等常见控件,以及换肤的概念。 1. **Winform窗体的重绘** - Winform窗体的重绘通常涉及到`OnPaint`事件。当窗体...

    c#Winform Combox控件重绘

    本文将详细探讨如何在VS2017环境下,针对.Net 2.0版本的Combox控件进行重绘操作。 首先,理解“重绘”(Redraw)的概念。在Windows Forms中,当控件的外观需要改变,如颜色、样式或形状时,我们通常会进行重绘。重...

    MFC ComboxBox重绘类

    在这个场景中,我们关注的是`CMyComboBox`,这是一个自定义的组合框(ComboBox)类,它是MFC中的标准`CComboBox`类的扩展,专门为了实现自定义重绘功能而设计。 在MFC中,`CComboBox`类是用来处理Windows API中的...

    C# TreeView重绘边框

    本文将深入探讨如何在C#中实现`TreeView`控件的边框重绘,以创建独一无二的视觉效果。 首先,了解`TreeView`的基本属性和方法。`TreeView`控件具有`Nodes`集合,用于添加、删除或操作节点;`DrawMode`属性可以设置...

    控件重绘 C# WinForm控件美化扩展系列之TabControl

    "控件重绘 C# WinForm控件美化扩展系列之TabControl"的主题聚焦于如何通过自定义控件重绘技术来优化TabControl的显示效果,使其更符合现代应用程序的审美需求。 TabControl是Windows Forms中一个常用且功能丰富的...

    重绘 C# button按钮

    本节将详细介绍如何通过重绘技术实现自定义的C#按钮。 首先,理解WinForms中的控件绘制原理至关重要。Windows Forms控件,包括Button,都是基于GDI+图形接口进行绘制的。默认情况下,系统会自动处理控件的绘制,但...

    C#重绘windows窗体标题栏和边框

    C#重绘Windows窗体标题栏和边框 C#重绘Windows窗体标题栏和边框是指使用C#语言来自定义Windows窗体的标题栏和边框的样式。这种技术可以使得Windows应用程序具有更加个性化的界面,类似于QQ、MSN、迅雷等聊天工具的...

    DELPHI重绘非客户区改变窗口外观

    在Delphi编程中,"重绘非客户区改变窗口外观"是一个高级技术,它允许开发者超越标准窗口样式的限制,自定义窗体的外观,包括标题栏、边框等非客户区部分。这个主题通常涉及到Windows API调用,以及GDI(图形设备接口...

    MFC 重绘CListCtrl、CTreeCtrl的滚动条.rar

    标题"**MFC 重绘CListCtrl、CTreeCtrl的滚动条.rar**"提供的资源正是针对这个需求,实现了滚动条的自定义重绘,以达到与控件完美融合的效果。 滚动条控件在MFC中由CScrollBar类表示,通常会与CListCtrl和CTreeCtrl...

    C# winform 重绘滚动条

    系统默认的滚动条样式可能无法满足所有设计要求,因此开发者经常需要重绘滚动条以实现独特的皮肤效果。本文将深入探讨如何在C# WinForm中实现滚动条的重绘。 首先,我们要理解WinForm中的控件绘制机制。Windows ...

    C# winforms ComboBox 重绘

    然而,有时候我们可能需要自定义ComboBox的外观或者功能,这就涉及到ComboBox的重绘技术。下面将详细介绍C# WinForms中ComboBox重绘的相关知识点。 1. **基本重绘原理** 在.NET Framework中,控件的重绘主要通过...

    窗体控件重绘

    "窗体控件重绘"是这个过程的关键技术,它允许开发者覆盖默认的绘制行为,创建独特的视觉效果。本压缩包包含了Button、Form、CheckBox、ListBox、TabControl和TextBox等常用控件的重绘示例,这些实例代码对于初学者和...

    MFC控件CTabCtrl的重绘,支持背景颜色、tab头字体颜色、背景色的修改

    重绘过程中,为了保持性能,可以利用Windows的消息机制,只在必要时(如tab切换、窗口大小改变等)才触发重绘。可以通过`SetRedraw`函数暂时关闭或开启控件的重绘功能,这样可以避免不必要的绘图操作。 除了`...

    自绘/重绘MFC右键菜单CMenu

    本篇文章将详细讲解如何在MFC应用中实现自绘或重绘右键菜单CMenu,以创建更具个性化的用户界面。 自绘(Custom Draw)或重绘(Redraw)是指在系统默认渲染的基础上,程序员通过调用特定的API函数或MFC类的方法来...

    MFC单文档界面的全部重绘

    本主题将深入探讨如何进行MFC单文档界面的全部重绘,包括标题栏、工具栏和菜单的自定义重绘。 1. **重绘基础** MFC提供了OnEraseBkgnd()和OnPaint()这两个消息处理函数,用于处理窗口背景的擦除和绘制。重绘SDI...

Global site tag (gtag.js) - Google Analytics