在画图板上画出一些图形后,如果最小化窗体,然后再将其最大化时,之前的图形会消失,为了使得之前的图形不消失,我们需要重载父类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;
}
分享到:
相关推荐
本文将深入探讨MFC中的“普通窗口重绘”这一关键知识点,包括重绘的原因、过程以及如何在MFC应用中实现窗口重绘。 首先,窗口重绘是一个常见的需求,它通常发生在以下几种情况:窗口被其他窗口覆盖后暴露出来,窗口...
在本文中,我们将深入探讨如何在MFC中重绘常见的控件,包括ListCtrl、Edit和ComboBox,这些都是Windows应用程序开发中的关键组件。 **ListCtrl控件** ListCtrl是一种多功能控件,它可以显示多列数据,类似于电子...
为了增强Edit控件的视觉效果和交互性,我们有时需要对其进行自定义重绘,使其符合特定的设计需求。本文将深入探讨如何在MFC中实现Edit控件的重绘,包括编辑框的边框处理、文字居中、非客户区与客户区的绘制,以及...
本教程将重点讲解如何在Duilib中进行控件的重绘,以实现自定义的视觉效果。 控件重绘是Duilib中实现界面个性化的重要手段。通过重绘,我们可以改变控件的默认外观,比如修改边框样式、调整颜色、添加图案或者动画...
在某些情况下,为了实现更复杂或个性化的界面效果,我们可能需要对CListCtrl进行重绘。本篇将深入探讨CListCtrl的重绘机制和如何实现全面的功能。 首先,理解CListCtrl的绘制过程至关重要。CListCtrl默认使用...
本文将深入探讨如何使用C#和GDI+来实现Winform窗体及控件的重绘功能,包括button、listbox、checkbox等常见控件,以及换肤的概念。 1. **Winform窗体的重绘** - Winform窗体的重绘通常涉及到`OnPaint`事件。当窗体...
本文将详细探讨如何在VS2017环境下,针对.Net 2.0版本的Combox控件进行重绘操作。 首先,理解“重绘”(Redraw)的概念。在Windows Forms中,当控件的外观需要改变,如颜色、样式或形状时,我们通常会进行重绘。重...
在这个场景中,我们关注的是`CMyComboBox`,这是一个自定义的组合框(ComboBox)类,它是MFC中的标准`CComboBox`类的扩展,专门为了实现自定义重绘功能而设计。 在MFC中,`CComboBox`类是用来处理Windows API中的...
本文将深入探讨如何在C#中实现`TreeView`控件的边框重绘,以创建独一无二的视觉效果。 首先,了解`TreeView`的基本属性和方法。`TreeView`控件具有`Nodes`集合,用于添加、删除或操作节点;`DrawMode`属性可以设置...
"控件重绘 C# WinForm控件美化扩展系列之TabControl"的主题聚焦于如何通过自定义控件重绘技术来优化TabControl的显示效果,使其更符合现代应用程序的审美需求。 TabControl是Windows Forms中一个常用且功能丰富的...
本节将详细介绍如何通过重绘技术实现自定义的C#按钮。 首先,理解WinForms中的控件绘制原理至关重要。Windows Forms控件,包括Button,都是基于GDI+图形接口进行绘制的。默认情况下,系统会自动处理控件的绘制,但...
C#重绘Windows窗体标题栏和边框 C#重绘Windows窗体标题栏和边框是指使用C#语言来自定义Windows窗体的标题栏和边框的样式。这种技术可以使得Windows应用程序具有更加个性化的界面,类似于QQ、MSN、迅雷等聊天工具的...
在Delphi编程中,"重绘非客户区改变窗口外观"是一个高级技术,它允许开发者超越标准窗口样式的限制,自定义窗体的外观,包括标题栏、边框等非客户区部分。这个主题通常涉及到Windows API调用,以及GDI(图形设备接口...
标题"**MFC 重绘CListCtrl、CTreeCtrl的滚动条.rar**"提供的资源正是针对这个需求,实现了滚动条的自定义重绘,以达到与控件完美融合的效果。 滚动条控件在MFC中由CScrollBar类表示,通常会与CListCtrl和CTreeCtrl...
系统默认的滚动条样式可能无法满足所有设计要求,因此开发者经常需要重绘滚动条以实现独特的皮肤效果。本文将深入探讨如何在C# WinForm中实现滚动条的重绘。 首先,我们要理解WinForm中的控件绘制机制。Windows ...
然而,有时候我们可能需要自定义ComboBox的外观或者功能,这就涉及到ComboBox的重绘技术。下面将详细介绍C# WinForms中ComboBox重绘的相关知识点。 1. **基本重绘原理** 在.NET Framework中,控件的重绘主要通过...
"窗体控件重绘"是这个过程的关键技术,它允许开发者覆盖默认的绘制行为,创建独特的视觉效果。本压缩包包含了Button、Form、CheckBox、ListBox、TabControl和TextBox等常用控件的重绘示例,这些实例代码对于初学者和...
重绘过程中,为了保持性能,可以利用Windows的消息机制,只在必要时(如tab切换、窗口大小改变等)才触发重绘。可以通过`SetRedraw`函数暂时关闭或开启控件的重绘功能,这样可以避免不必要的绘图操作。 除了`...
本篇文章将详细讲解如何在MFC应用中实现自绘或重绘右键菜单CMenu,以创建更具个性化的用户界面。 自绘(Custom Draw)或重绘(Redraw)是指在系统默认渲染的基础上,程序员通过调用特定的API函数或MFC类的方法来...
本主题将深入探讨如何进行MFC单文档界面的全部重绘,包括标题栏、工具栏和菜单的自定义重绘。 1. **重绘基础** MFC提供了OnEraseBkgnd()和OnPaint()这两个消息处理函数,用于处理窗口背景的擦除和绘制。重绘SDI...