GUI组件上的图形操作-3

1)      Graphics类与图形绘制

 

package GUI;

 

import java.awt.*;

import java.awt.event.*;

 

public class DrawLine extends Frame {

  public DrawLine()//添加构造方法

  {

         addWindowListener(new WindowAdapter(){//注册窗口适配器

 

 

                public void windowClosing(WindowEvent arg0) {//重写关闭窗口的方法

                       dispose();     //释放该窗口

                       System.exit(0);//停止程序的运行

                }

 

         });

         this.addMouseListener(new MouseAdapter(){

                int orgX;//初始点的横坐标

                int orgY;//初始点的纵坐标

                public void mousePressed(MouseEvent e)

                {

                       orgX=e.getX();//获得初始点的横坐标

                       orgY=e.getY();//获得初始点的纵坐标

                }

                public void mouseReleased(MouseEvent e)

                {

                       Graphics graphics=getGraphics();//定义一个画图对象

                       graphics.setColor(Color.RED);  //设置字体的颜色为红色

                       graphics.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));//设置字的格式

                       graphics.drawString(orgX+","+orgY, orgX, orgY);//在初始坐标处划线

                       graphics.drawString(e.getX()+","+e.getY(), e.getX(), e.getY());//在末坐标处划线

                       graphics.drawLine(orgX, orgY, e.getX(), e.getY());//根据初始坐标和末坐标画线

                }

         });

  }

  public static void main(String[] args) {

         System.out.println("starting TestMyButton..");

         DrawLine drawLine=new DrawLine();//实例化定义的创库

         drawLine.setSize(400, 400);//设置窗口的大小

         drawLine.setTitle("TestMyButton");

         drawLine.setVisible(true);

  }

}

 

2)      组件重绘的处理

直线类:

package GUI;

 

import java.awt.*;

import java.awt.event.*;

import java.util.*;

 

public class MyLine {

    private int orgX;

    private int orgY;

    private int endX;

    private int endY;

    public MyLine(int orgX,int orgY,int endX,int endY)

    {

       this.orgX=orgX;

       this.orgY=orgY;

       this.endX=endX;

       this.endY=endY;

    }

    public void drawMe(Graphics g)

    {

       g.setColor(Color.RED);  //设置字体的颜色为红色

       g.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));//设置字的格式

       g.drawString(orgX+","+orgY, orgX, orgY);//在初始坐标处划线

       g.drawString(endX+","+endY, endX, endY);//在末坐标处划线

       g.drawLine(orgX, orgY, endX, endY);

    }

}

主类:

package GUI;

 

import java.awt.*;

import java.awt.event.*;

import java.util.*;

public class DrawLine extends Frame {

    int orgX;//初始点的横坐标

    int orgY;//初始点的纵坐标

    int endX;

    int endY;

    Vector vLines=new Vector();

    public void paint(Graphics g)

    {

       Enumeration e=vLines.elements();

       while (e.hasMoreElements()) {

           MyLine line=(MyLine)e.nextElement();

           line.drawMe(g);

       }

    }

    public DrawLine()//添加构造方法

    {

       addWindowListener(new WindowAdapter(){//注册窗口适配器

 

 

           public void windowClosing(WindowEvent arg0) {//重写关闭窗口的方法

              dispose();     //释放该窗口

              System.exit(0);//停止程序的运行

           }

 

       });

       this.addMouseListener(new MouseAdapter(){

          

           public void mousePressed(MouseEvent e)

           {

              orgX=e.getX();//获得初始点的横坐标

              orgY=e.getY();//获得初始点的纵坐标

           }

           public void mouseReleased(MouseEvent e)

           {

              endX=e.getX();//获得末点横坐标

              endY=e.getY();//获得末点纵坐标

              vLines.add(new MyLine(orgX,orgY,endX,endY));//存储坐标

              repaint();//调用绘图方法,重绘直线

           }

       });

    }

    public static void main(String[] args) {

       System.out.println("starting TestMyButton..");

       DrawLine drawLine=new DrawLine();//实例化定义的创库

       drawLine.setSize(400, 400);//设置窗口的大小

       drawLine.setTitle("TestMyButton");

       drawLine.setVisible(true);

    }

}

 

3)      图像显示

package drawImage;

 

import java.awt.*;

import java.awt.event.*;

 

public class DrawImage extends Frame{

     

    Image img=getToolkit().getImage("hero.gif");//加载图像对象

    public void paint(Graphics g)

    {

       while (!g.drawImage(img, 20, 20, this));

    }

 

    public DrawImage()//添加构造方法

    {

       addWindowListener(new WindowAdapter(){//注册窗口适配器

 

 

           public void windowClosing(WindowEvent arg0) {//重写关闭窗口的方法

              dispose();     //释放该窗口

              System.exit(0);//停止程序的运行

           }

 

       });

    }

    public static void main(String[] args) {

       System.out.println("starting DrawImage..");

       DrawImage drawImage=new DrawImage();

       drawImage.setSize(400, 400);//设置窗口的大小

       drawImage.setTitle("TestMyButton");

       drawImage.setVisible(true);

 

    }

 

}

问题:为什么没用到repaint()

4)      双缓冲技术

package drawImage;

import GUI.*;

 

import java.awt.*;

import java.awt.event.*;

import java.util.*;

public class DrawLine1 extends Frame {

    int orgX;//初始点的横坐标

    int orgY;//初始点的纵坐标

    int endX;

    int endY;

    Image image=null;

    Graphics graphics=null;

    public void paint(Graphics g)

    {

       System.out.println("我来了");

       g.drawImage(image,20,20,this);//image第一次可以是空的

    }

    public DrawLine1()//添加构造方法

    {

       setSize(400, 400);//设置窗口的大小

       setTitle("TestMyButton");

       setVisible(true);

      

       Dimension d=this.getSize();

       image=createImage(d.width, d.height);

       graphics=image.getGraphics();

      

      

      

       addWindowListener(new WindowAdapter(){//注册窗口适配器

           public void windowClosing(WindowEvent arg0) {//重写关闭窗口的方法

              dispose();     //释放该窗口

              System.exit(0);//停止程序的运行

           }

 

       });

      

      

       this.addMouseListener(new MouseAdapter(){

      

           public void mousePressed(MouseEvent e)

           {

              orgX=e.getX();//获得初始点的横坐标

              orgY=e.getY();//获得初始点的纵坐标

           }  

           public void mouseReleased(MouseEvent e)

           {

              endX=e.getX();//获得末点横坐标

              endY=e.getY();//获得末点纵坐标

             

              Graphics g=getGraphics();

              g.setColor(Color.RED);  //设置字体的颜色为红色

              g.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));//设置字的格式

              g.drawString(orgX+","+orgY, orgX, orgY);//在初始坐标处划线

              g.drawString(endX+","+endY, endX, endY);//在末坐标处划线

              g.drawLine(orgX, orgY, endX, endY);

             

              graphics.setColor(Color.RED);  //在内存中设置字体的颜色为红色

              graphics.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));//在内存中设置字的格式

              graphics.drawString(orgX+","+orgY, orgX, orgY);//在内存中初始坐标写坐标

              graphics.drawString(endX+","+endY, endX, endY);//

              graphics.drawLine(orgX, orgY, endX, endY);//在内存中绘制线

           }

       });

    }

    public static void main(String[] args) {

       System.out.println("starting TestMyButton..");

       DrawLine1 drawLine=new DrawLine1();//实例化窗口

      

    }

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值