`
zlele
  • 浏览: 37471 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

画图板及重绘

阅读更多
一.简单画图板
1.首先是一个简单的可以画直线的画图板需要用到监听器和画布
  新组件:
  靠鼠标的移动产生直线:MouseListener
  需要在画布上作图:Graphics
  关键字:this用于在构造方法中引用满足指定参数类型的构造器,但只能引用一个构造方法且必须位于开始
2. 鼠标监听器:
Mouse1类:
 
 //定义一个Mouse1类实现鼠标监听器中的抽象方法
   public class Mouse1 implements MouseListener,MouseMotionListener{
   //因为和主函数中的画板联系,所以不可用Graphics g=new Graphics();
   private Graphics g;
   int x1,y1,x2,y2;
   //传参:需要在画布上画线,所以需要传参
   public Mouse1(Graphics g){
   this.g=g;
   }
   //鼠标被按下时
   public void mousePressed(MouseEvent e){
   x1=e.getX();//得到第一个点的横坐标
   y1=e.getY();//得到第一个点的纵坐标
   }
   //鼠标拖动,产生边画边现实的效果,因为要擦去拖动过程产生的线,所以要用背景色重绘一遍
  //利用临时变量储存终点
private int  tempx=0,tempy=0;
public void mouseDragged(MouseEvent e){
   x2=e.getX();//得到第二个点的横坐标
   y2=e.getY();//得到第二个点的纵坐标
   //画直线
   g.drawLine(x1, y1, x2, y2);
//利用临时变量绘制背景线,详细代码与画彩线类似
	tempx=shape.x2;
                tempy=shape.y2;

 }
   //鼠标被释放后
   public void mouseReleased(MouseEvent e){
}

                
主函数:
 
(画布位于窗体上方,需申请得到)
   //申请得到画布
   Graphics gr=jf2.getGraphics();
   //声明鼠标监听器
   Mouse1 mouse1=new Mouse1(gr);
   //添加鼠标监听器
   jf2.addMouseListener(mouse1);
  jf2.addMouseMotionListener(mouse1);
二.可以选择图形的画板
1.新组件
           动作监听器:ActionListener
           颜色选项:Color c=new Color(66,6,2);
           数学函数:如x3=Math.min(x1, x2);//x1,x2的最小值
2.通过选择不同的按钮画出不同的形状:动作监听器
ActionChoose类:
 
  //通过ActionChoose实现动作监听器
    public class ActionChoose implements ActionListener{
   //通过按钮的不同来得到不同的画图标识
   private String command;
   //用getCommand方法得到类型
   public String getCommand()
   {
    return command;
   }
   public void actionPerformed(ActionEvent e){
   //根据不同的按钮类型赋给command不同的值进行画线的判断
   if(e.getActionCommand().equals("直线"))
   {
    command = "line";
   }
 ````
    }
 }
主函数:
  
 //声明动作选择监听器
    ActionChoose acc=new ActionChoose();
    //设置图形按钮
    JRadioButton line=new JRadioButton("直线");
    //添加监听器
    line.addActionListener(acc);
    //在Mouse1中需要根据ActionChoose的选择进行判断所画图形形状 
    Mouse1 mouse1=new Mouse1(gr,acc);
Mouse1类:
  
 public class Mouse1 implements MouseListener{
    private Graphics g;
    private ActionChoose ac;
    int x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x7,y7;
    //传参
    public Mouse1(Graphics g,ActionChoose ac){
   this.g=g;
   this.ac = ac;
   }
   //根据加到按钮监听器对象得到选择按钮的类型进行判断画图
   String nValue = ac.getCommand();
   //直线
   if(nValue.equals("line"))
   g.drawLine(x1, y1, x2, y2);
                 }
三.关于画图
    扩展思维
    ·线可以组成三角形,箭头等;
    ·多个平面图形的重复累加可形成立体图形;
    ·多个线条可形成立体图形;
    ·通过对图形颜色的控制可以画出立体效果;
四.关于画图板的重绘
    在改变窗体大小或移动除桌面时,图形会消失。这是因为所绘图形保存在缓存而不是内存中,所以,改变窗体后,只显示窗体,不显示图形。在JFrame中,有paint方法,系统会自动调用,因此,如果想重绘图形,则要重写paint方法,是指可以画出之前的图形,即遍历所画图形。利用队列保存图形,再利用paint重绘。
//注意写在JFrame中
public void paint(Graphics g){
         //重写窗体,否则不显示窗体
		super.paint(g);
		for(int i=0;i<shapelist1.size();i++){
			Shape shape=shapelist1.get(i);
			g.getColor();
			shape.draw(g);
		}
//每放开鼠标一次,保存一次
public void mouseReleased(MouseEvent e){
                //要在内部定义,否则只保存最后一个图形
                     Shape shape = new Shape();
		shape.x1=x1;	    	
		shape.y1=y1;
	    	shape.x2=e.getX();
	    	shape.y2=e.getY();
	    	shape.color = jcc.getColor();
	    	shape.type=nValue;
	    	//保存图形
		 shapelist.add(shape);
	 }
  • 大小: 44.1 KB
分享到:
评论

相关推荐

    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简易画图板

    这可能是通过设置一个特定的颜色(如背景色)和不透明度,然后在指定区域内重绘,以达到擦除效果。 5. **颜色选择**:用户可以改变画笔颜色,这需要实现颜色选择器,可能是一个颜色对话框,用户选择颜色后,将所选...

    MFC做的画图板

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

    简单画图板的设计

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

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

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

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

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

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

    2. **OnPaint事件**:当窗口需要重绘时,系统会发送WM_PAINT消息,通过覆盖CWnd的OnPaint函数来处理图形的绘制。 3. **CDC类**:设备上下文(Device Context,DC)是Windows图形模型的核心,CDC类封装了与设备相关...

    java画图板

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

    C#的简单画图板源码

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

    仿 XP 系统画图板

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

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

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

    VC++6.0画图板

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

    MFC 画图板完整源码

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

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

    该画图板的主要功能包括但不限于图形的绘制、线型与颜色的设置、图形文件的重绘及保存等。 #### MFC与VC++简介 1. **VC++6.0:** - VC++6.0是微软发布的一款在Windows平台上的强大C++编译器。 - 它提供了高级的...

    android画图板

    在Android平台上,开发一款画图板应用是一种常见的需求,它可以让用户进行自由绘画、涂鸦或者进行图形设计。本文将详细解析"android画图板"这个主题,介绍如何在Android中实现一个基本的画线功能,并探讨两种不同的...

Global site tag (gtag.js) - Google Analytics