当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

画图板的基本实现

发表于: 2015-06-03   作者:15700786134   来源:转载   浏览:
摘要:  要实现画图板的基本功能,除了在qq登陆界面中用到的组件和方法外,还需要添加鼠标监听器,和接口实现。 首先,需要显示一个JFrame界面: public class DrameFrame extends JFrame {              //显示

 要实现画图板的基本功能,除了在qq登陆界面中用到的组件和方法外,还需要添加鼠标监听器,和接口实现。

首先,需要显示一个JFrame界面:

public class DrameFrame extends JFrame {
              //显示界面
     public void initUI(){
         this.setSize(600,600);
         this.setTitle("画图板");
         this.setDefaultCloseOperation(3);
         this.setLocationRelativeTo(null);
         this.setVisible(true);
         //从窗体上获取画笔,在窗体可见之后获取
         Graphics g=this.getGraphics();

}

 

 

  然后需要给界面添加监听器,获取点击时的坐标,

 DrameListener d=new DrameListener();
         //给窗体对象增添鼠标监听器
        this.addMouseListener(d);       

 

 

在新写一个类用于实现鼠标监听器接口,实现接口需要重写其中所有方法,在方法中添加自己希望实现的功能,包括获取点击时的坐标,绘制各种图形,代码如下:

 

public class DrameListener implements MouseListener,MouseMotionListener{
    private int x1,x2,y1,y2;                       //点击时获得的坐标,MouseMotionListener是用于实现拖动事件
    private Graphics g;                            
    private String s;                                 //s用于获得文本框中的字符串
    private ButtonListener but;
    private Color color;                             
    private int ax,ay,bx,by,cx,cy;                      //画三角形的坐标
    private int flag=1;                    
   
    public String getS(){
        return s;
    }
   
    //
    public void setBut(ButtonListener but){
        this.but = but;
    }
   
    public void setG(Graphics g){
        this.g=g;
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        //通过标志找到点击过的点
        if(flag == 1 && s.equals("三角形")){
            ax = e.getX();
            ay = e.getY();
            flag++;
        }else if(flag == 2){
            bx = e.getX();
            by = e.getY();
            flag++;
        }else if(flag == 3){
            cx = e.getX();
            cy = e.getY();
            g.drawLine(ax, ay,bx, by);
            g.drawLine(bx, by,cx, cy);
            g.drawLine(ax, ay,cx, cy);
            flag = 1;
        }
    }

    @Override
    public void mousePressed(MouseEvent e) {
        x1=e.getX();
        y1=e.getY();
        s = but.getS();
        color =  but.getColor();                      
        g.setColor(color);                                           //按下时获得颜色
        System.out.println("but,getS()="+s);
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        x2=e.getX();
        y2=e.getY();
        if(s.equals("直线")){
            System.out.println("x2 = "+x2 +"     y2 = "+y2);
            g.drawLine(x1, y1, x2, y2);
        }
        else if(s.equals("椭圆")){
                for(int i=1;i<=100;i++){
                g.setColor(new Color(2*i,i+100,0));
                g.fillOval(x1+i/2, y1+i/2, Math.abs(x1-x2)-i, Math.abs(y2-y1)-i);
                }
        }
        else if(s.equals("矩形")){
            g.drawLine(x1, y1, x1,y2);
            g.drawLine(x1, y1, x2, y1);
            g.drawLine(x2, y1, x2, y2);
            g.drawLine(x1, y2, x2, y2);
        }
//        else if(s.equals("三角形")){
//           g.drawLine(x1, y1, x2, y2);
//           g.drawLine(x1, y1, x1, y2);
//           g.drawLine(x1, y2, x2, y2);
//        }
    }

    @Override
    public void mouseEntered(MouseEvent e) {
       
    }

    @Override
    public void mouseExited(MouseEvent e) {
       
    }
  
    //实现拖动
    public void mouseDragged(MouseEvent e) {
        System.out.println(">>>>>>>>>>>");
        // TODO Auto-generated method stub
        if(s.equals("铅笔")){
        x2=e.getX();
        y2=e.getY();
        g.drawLine(x1, y1, x2, y2);
        x1=x2;y1=y2;
    }
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        // TODO Auto-generated method stub
   
    }
}

 

 

 

在添加一个类,用于侦听获取点击时按钮中的文字或颜色:

public class ButtonListener implements ActionListener {
        private String s  = "直线";
        private Color color;
       
        public String getS(){
            return s;
        }
        public Color getColor(){
            return color;
        }
    @Override
    public void actionPerformed(ActionEvent e) {

         if(e.getActionCommand().equals("")){
             //获取当前事件源对象
             JButton jbu=(JButton)e.getSource();
             //获取颜色按钮的背景色
            color =  jbu.getBackground();
            System.out.println("color= "+color);
         }else {
                //    获取按钮上的字符串
             s = e.getActionCommand();
         }
//        System.out.println("s = "+s);
    }
}


在实现过程中,需要注意的有画笔和参数的传递,监听器的正确添加,按钮中文字或颜色的正确获取。

画图板的基本实现

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
画图板的实现 项目截图: 这是我学习Java做的第一个小软件,这是一个仿照Windows XP系统下的画图板
画图板实现和优化总结 来蓝杰参加培训的第一个完整意义上但还远不满意的项目——画图板的实现及优化
在大一的时候,我对敲代码一直有着很深的反感,一直认为敲代码是一件枯燥无味的事情,每天甚至要在
这是一个仿XP的画图板,再重绘的基础上可以实现基本的画图、橡皮檫、画多边形、圆等等功能,并且可
/** * 有选择的画图板的实现, */ package 有选择的画图板; import javax.swing.*; import java.awt
转载请注明出处:王亟亟的大牛之路 各类自定义View大多都是画+动画实现的,所以这一次讲点基础的,
先看下实现后的效果: <!--StartFragment --> 要完成这东西,首先界面的东西是不能少的 publi
仿XP画图板BMP保存实现总结 终于实现XP画图板的保存实现了。 项目:仿XP画图板 实现功能:在实现原
这两天在摸索WindowsPhone应用程序的开发,实现了一个简单的画图板应用程序和一个简单的手机端与电
通过这篇文章的标题可以知道,本篇博文,有两部分的内容,第一部分是用Java的组件做一个简易的画图
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号