Java实现简单小画板

Fiona ·
更新时间:2024-09-20
· 1690 次阅读

Java制作简单画板,包括两个类,一个主要画板类Drawpad,一个画板监听器DrawListener类。

1、Drawpad类,包括画板,画板功能设计,保存图片等

package Java课程设计; import java.awt.Graphics; import javax.imageio.ImageIO; import javax.print.DocFlavor.STRING; import javax.swing.ImageIcon; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import java.awt.AWTException; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.Robot; import java.awt.Shape; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.filechooser.FileNameExtensionFilter; public class Drawpad {      static Color color1; public static void main(String[] args) {     Drawpad dp = new Drawpad();     dp.initUI(); }      //创建一个JFrame图形窗口     public void initUI() {         JFrame jf = new JFrame();         jf.setTitle("创意画图板(勿拖动)");         jf.setSize(1500,1000);         jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭时退出         jf.setLocationRelativeTo(null);//居中,不用定位窗口大小         //创建字体,之后所有的字体为该字体         Font f=new Font("方正仿宋简体", Font.BOLD, 20);         //创建画笔监听器         DrawListener  dl = new DrawListener();         //创建读取图片BufferedImage(将图片加载到drawPanel面板中)和画笔g,画笔g为在保存图片上进行图画。                 BufferedImage bi = new BufferedImage(1300,800, BufferedImage.TYPE_INT_ARGB);                 Graphics2D g = bi.createGraphics();                 //初始化时填充白色                 g.setColor(Color.WHITE);                 //先将图片填充为白色                 g.fillRect(0, 0, 1300,800);         //设置增加菜单栏,包括保存和新建两个按钮         JMenuBar box=new JMenuBar();         //在窗体上加菜单条,做一个菜单条,是菜单条,不是工具栏         //创建menubtn1保存按钮,并加上监听器,以图片的形式保存绘画板上的内容         JButton menubtn1=new JButton("保存");         //为保存按钮注册监听器           menubtn1.addActionListener(new ActionListener(){                  @Override                  public void actionPerformed(ActionEvent arg0) {                      //创建文件保存窗口                      JFileChooser f=new JFileChooser("保存");                      int returnVal = f.showSaveDialog(null);                     File    file1=null;                     if(returnVal == JFileChooser.APPROVE_OPTION) {                         file1 =f.getSelectedFile();                         String name = f.getName(file1);                         try {                             ImageIO.write(bi, "PNG", new File(f.getCurrentDirectory(),name+".png"));                         } catch (IOException e) {                             //需抛出异常                             // TODO Auto-generated catch block                             e.printStackTrace();                         }                     }                  }               });          /*JButton menubtn2=new JButton("打开");           //为打开按钮注册监听器           menubtn1.addActionListener(new ActionListener(){                @Override                //获取当前画笔粗细                public void actionPerformed(ActionEvent arg0) {                    BufferedImage bimg = null;                    JFileChooser f=new JFileChooser("打开");                  int returnVal = f.showOpenDialog(null);                 File    file1=null;                 if(returnVal == JFileChooser.APPROVE_OPTION) {                     file1 =f.getSelectedFile();                     String name = f.getName(file1);                     try {                     } catch (IOException e) {                         // TODO Auto-generated catch block                         e.printStackTrace();                     }                 }                }             });*/         //创建menubtn3退出按钮,并加上监听器,退出程序           JButton menubtn3=new JButton("退出");           menubtn3.addActionListener(new ActionListener(){                    @Override                    //获取当前画笔粗细                    public void actionPerformed(ActionEvent arg0) {                        int ret=JOptionPane.showConfirmDialog(null, "你确定要退出吗", "确认退出", JOptionPane.YES_NO_OPTION);                        if(ret==JOptionPane.YES_OPTION){                            //“确认”退出程序                            System.exit(0);                        }                    }                 });           box.add(menubtn1);          // box.add(menubtn2);           box.add(menubtn3);         //jf.setJMenuBar(box);         jf.setJMenuBar(box);         //jf用BorderLayout布局         //北边,画板模式功能栏         JPanel funcPanel=new JPanel();         jf.add(funcPanel,BorderLayout.NORTH);         //中间,画布         JPanel drawPanel=new JPanel();         jf.add(drawPanel,BorderLayout.CENTER);         drawPanel.setPreferredSize(new Dimension(1000,700));         drawPanel.setBackground(dl.background);         //一定要在画布上加上监听器!!1若画布没有加上监听器,无法显示         drawPanel.addMouseListener(dl);         drawPanel.addMouseMotionListener(dl);         //南边,为画笔颜色选择按钮         JPanel colorPanel=new JPanel();         jf.add(colorPanel,BorderLayout.SOUTH);         //右边,为选择背景颜色按钮、画笔粗细选择按钮         JPanel backgroundPanel=new JPanel();         jf.add(backgroundPanel,BorderLayout.EAST);         backgroundPanel.setPreferredSize(new Dimension(150,1000));         //左边,获取当前状态如:背景颜色、画笔颜色、画笔性质         JPanel nowPanel=new JPanel();         jf.add(nowPanel,BorderLayout.WEST);         nowPanel.setPreferredSize(new Dimension(180,1000));         //左边放入当前状态Panel         nowPanel.setBackground(Color.WHITE);          JLabel label2=new JLabel("当前背景颜色");           label2.setFont(f);            nowPanel.add(label2);            //放入当前背景颜色            JButton nowbackgroundColor=new JButton();            nowbackgroundColor.setPreferredSize(new Dimension(60,60));            nowbackgroundColor.setBackground(Color.WHITE);//背景初始化为灰色            nowPanel.add(nowbackgroundColor);            //放入当前画笔            JLabel label3=new JLabel("请选择画笔模式");               label3.setFont(f);                nowPanel.add(label3);            //放入当前画笔颜色            JButton nowColor=new JButton();            nowColor.setPreferredSize(new Dimension(60,60));            nowColor.setBackground(Color.BLACK);//画笔颜色初始化为黑色色            nowPanel.add(nowColor);             //获取当前画笔模式             JLabel label4=new JLabel("当前画笔模式");               label4.setFont(f);                nowPanel.add(label4);                JTextField text=new JTextField(dl.btncontent); //获得选择画笔模式的按钮内容,得到当前画笔模式                text.setPreferredSize(new Dimension (160,60));                text.setFont(f);                text.setEditable(false);  //不可改             nowPanel.add(text);             //获取当前画笔粗细状态             JLabel label6=new JLabel("当前画笔粗细(中)");  //默认粗细为中               label6.setFont(f);                nowPanel.add(label6);                JTextField text1=new JTextField("请选择画笔粗细");                text1.setPreferredSize(new Dimension (160,60));                text1.setFont(f);                text1.setEditable(false); //不可编辑             nowPanel.add(text1);             //输入需要添加的文字             JLabel label7=new JLabel("请输入文字:");               label7.setFont(f);                nowPanel.add(label7);                JTextField text2=new JTextField();                text2.setPreferredSize(new Dimension (160,60));                text2.setFont(f);                nowPanel.add(text2);                 JLabel label8=new JLabel("请输入文字样式:");                   label8.setFont(f);                    nowPanel.add(label8);                    JTextField text3=new JTextField("方正仿宋简体");                    text3.setPreferredSize(new Dimension (160,60));                    text3.setFont(f);                    nowPanel.add(text3);                    JLabel label9=new JLabel("请输入文字大小:");                       label9.setFont(f);                        nowPanel.add(label9);                        JTextField text4=new JTextField("20");                        text4.setPreferredSize(new Dimension (160,60));                        text4.setFont(f);                        nowPanel.add(text4);             //为获取文字内容加一个按钮并加上监听器                JButton getcontent=new JButton("获取文字");                getcontent .setFont(f);                 getcontent.setBackground(Color.YELLOW);                 getcontent.addActionListener(new ActionListener(){                     @Override                     public void actionPerformed(ActionEvent e) {                          String content=text2.getText();                         String mode=text3.getText();                         String size=text4.getText();                         dl.mode=mode; //获取文字样式                            dl.content=content; //获取文字内容                            dl.size=size; //获取文字大小                     }                  });                 nowPanel.add(getcontent);                 //最后在当前状态画板中加一个清除画布内容的功能                 JButton clear=new JButton("清除");                   clear.setFont(f);                     clear.setBackground(Color.RED);                     clear.addActionListener(dl);                     nowPanel.add(clear);         //添加按钮到北边(每个按钮写两行代码太多,通过数组方式添加按钮)                 //加入标签(选择画笔模式)                 JLabel labelh =new JLabel("选择画笔模式");                 labelh.setFont(f);                 funcPanel.add(labelh);                 //将按钮名字保存在数组中,后依次存储         String[] btnstr= {"画笔","直线","矩形","填充矩形","圆","填充圆","弧线","喷枪","波形","分形","长方体","九宫格递归","文字","橡皮"};         //将画笔状态按钮防置panel中         for( int i=0;i<btnstr.length;i++) {             JButton btn=new JButton(btnstr[i]);             funcPanel.add(btn);             btn .setFont(f);             btn.setBackground(Color.white);             //加上画笔监听器             btn.addActionListener(dl);             //加上监听器:获取当前 画笔模式             btn.addActionListener(new ActionListener(){                 @Override                 public void actionPerformed(ActionEvent e) {                     text.setText(btn.getText()); //在当前模式加入选取的画笔模式                 }              });         };         //在BrderLayout布局SOUTH添加选择颜色按钮         JLabel label =new JLabel("选择画笔(橡皮)颜色");         label.setFont(f);         colorPanel.add(label);          //添加颜色按钮         Color[] colorArray = { Color.BLUE, Color.GREEN, Color.RED,                  Color.BLACK,Color.ORANGE,Color.PINK,Color.CYAN,                 Color.MAGENTA,Color.DARK_GRAY,Color.GRAY,                 Color.LIGHT_GRAY,Color.YELLOW,Color.WHITE};         //在布局管理器中添加颜色按钮         for( int i=0;i<colorArray.length;i++) {             JButton button = new JButton();             button.setBackground(colorArray[i]);             button.setPreferredSize(new Dimension(50, 50));             button.addActionListener(dl);             colorPanel.add(button);             //获取当前状态的画笔颜色             button.addActionListener(new ActionListener(){                 @Override                 public void actionPerformed(ActionEvent e) {                     nowColor.setBackground(button.getBackground());  //在当前画笔颜色按钮加入选择的按钮颜色                 }              });         };       funcPanel.setBackground(Color.gray);       //添加背景主板颜色按钮,并设置监听器(背景颜色为按钮颜色)       JLabel label1=new JLabel("选择背景颜色");       label1.setFont(f);        backgroundPanel.add(label1);       Color[] backgroundArray= { Color.GREEN, Color.RED,           Color.ORANGE,Color.PINK,Color.CYAN,               Color.MAGENTA,Color.DARK_GRAY,Color.GRAY,               Color.LIGHT_GRAY,Color.YELLOW,Color.WHITE,Color.BLACK};       //将按钮加入进去       for( int i=0;i<backgroundArray.length;i++) {           JButton button = new JButton();           button.setBackground(backgroundArray[i]);           button.setPreferredSize(new Dimension(50, 50));           backgroundPanel.add(button);           //添加监听器,按下按钮改变背景颜色,同时体现当前状态         button.addActionListener(new ActionListener(){             @Override             public void actionPerformed(ActionEvent arg0) {                 drawPanel.setBackground(button.getBackground()); //将背景颜色改为选取的背景颜色                 color1=button.getBackground();                 dl.background=color1;  //将背景颜色传给DrawListener中的变量                 System.out.println(color1);                 g.setColor(color1);                 g.fillRect(0, 0, 1300,800);  //图片画笔填充背景颜色                 nowbackgroundColor.setBackground(button.getBackground());             }          });         };         //添加选择画笔粗细的按钮,可选择画笔的粗细         JLabel label5=new JLabel("选择画笔粗细");           label5.setFont(f);            backgroundPanel.add(label5);            String[] Size={"细","中","粗"};            //选择画笔模式的按钮            for(int i=0;i<3;i++){                JButton graphsize=new JButton(Size[i]);                graphsize.setFont(new Font("宋体", Font.BOLD, 15));                graphsize.setBackground(Color.WHITE);                graphsize.setPreferredSize(new Dimension(50, 50));                backgroundPanel.add(graphsize);                graphsize.addActionListener(dl);                graphsize.addActionListener(new ActionListener(){                    @Override                    //获取当前画笔粗细                    public void actionPerformed(ActionEvent e) {                        text1.setText(graphsize.getText()); //获取当前画笔模式                    }                 });            }         jf.setVisible(true);         // 获取这个界面的graphics属性, 画笔 g         //Graphics2D g = (Graphics2D) drawPanel.getGraphics();         //drawPanel.paintComponent(g);          Graphics2D g1= (Graphics2D) drawPanel.getGraphics();         //为画笔添加监听器         drawPanel.addMouseListener(dl);         dl.g =  g1;// 右传左          dl.g3 = g;// 右传左     } }

2、DrawListner类,画板功能监听器

package Java课程设计; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.Shape; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseMotionListener; import java.awt.geom.AffineTransform; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import java.awt.Color; import java.util.ArrayList; import java.util.Random; import Java课程设计.Drawpad; public class DrawListener implements MouseListener,ActionListener,MouseMotionListener {     //获取画笔     Graphics2D g;     //获取在保存图片上的画笔         Graphics2D g3;     //获取按钮内容     String btnstr;     Color background=Color.white; //背景颜色默认为白色     Color graphcolor=Color.BLACK; //画笔颜色默认为黑色     JButton btn;     int x1, y1, x2, y2;// 声明坐标变量      int x3=400;     int y3=0;     int graphsize=3;//默认为中等画笔     String btncontent="画笔"; //默认画笔模式为画笔     String content;  //获取文字中的文字内容     String mode="方正仿宋简体";  //文字样式默认为“方正仿宋简体”     String size="20";     //九宫格递归方法,画出九宫格     public void dg(int x,int y,int width,int height) {         //九宫格函数,九宫格的实现          if(width<3) {                 return;                 }         if(width>90) {         g.fillRect(x+width/3, y+height/3, width/3, height/3);         g3.fillRect(x+width/3, y+height/3, width/3, height/3);         dg(x, y, width/3, height/3);         dg(x+width/3, y, width/3, height/3);         dg(x+(width/3)*2, y, width/3, height/3);         dg(x, y+height/3, width/3, height/3);         dg(x, y+(height/3)*2, width/3, height/3);         dg(x+width/3, y+height/3, width/3, height/3);         dg(x+width/3, y+(height/3)*2, width/3, height/3);         dg(x+(width/3)*2, y+height/3, width/3, height/3);         dg(x+(width/3)*2, y+(height/3)*2, width/3, height/3);         }       //九宫格的实现        else {            g.drawOval(x+width/3, y+height/3, width/3, height/3);            g3.drawOval(x+width/3, y+height/3, width/3, height/3);            dg(x, y, width/3, height/3);            dg(x+width/3, y, width/3, height/3);             dg(x+(width/3)*2, y, width/3, height/3);             dg(x, y+height/3, width/3, height/3);             dg(x, y+(height/3)*2, width/3, height/3);             dg(x+width/3, y+height/3, width/3, height/3);             dg(x+width/3, y+(height/3)*2, width/3, height/3);             dg(x+(width/3)*2, y+height/3, width/3, height/3);             dg(x+(width/3)*2, y+(height/3)*2, width/3, height/3);        }         }     //判断是颜色按钮还是画笔按钮,改变的全部是画笔按钮     public void actionPerformed(ActionEvent e) {         btnstr=e.getActionCommand();  //获取按钮的文字内容         //g.setColor(Color.black);         //如果为颜色按钮,将画笔改颜色         if(btnstr.equals("清除")){             //重新填充背景,同时将画笔置为背景颜色              System.out.println(background);             g.setColor(background);//保存图片画笔填充背景颜色             g.fillRect(0, 0, 1300, 800);             g3.setColor(background);//画笔重新填充背景             g3.fillRect(0, 0, 1300, 800);             g.setColor(graphcolor);             g3.setColor(graphcolor);         }         else{         if(btnstr.equals("")) {             //获取点击内容,将其内容强制转换成JButton            btn=(JButton) e.getSource();             //获取颜色按钮颜色            graphcolor=btn.getBackground();         }         //若为画笔粗细,获取粗细大小         else if(btnstr.equals("细")){             graphsize=1;  //画笔大小为细,大小size为1         }         else if(btnstr.equals("中")){             graphsize=3;         }         else if(btnstr.equals("粗")){             graphsize=5;         }         else{             btncontent=btnstr; //获取画笔模式按钮的内容         }         }     }     //鼠标点击方法     @Override     public void mouseClicked(MouseEvent e) {         System.out.println("点击");     }    //鼠标按下方法     @Override     public void mousePressed(MouseEvent e) {         System.out.println("按下");         x1=e.getX();         y1 =e.getY();     }     //重写鼠标释放时的方法     @Override     public void mouseReleased(MouseEvent e) {         g.setColor(graphcolor);//获取保存画笔的颜色         g3.setColor(graphcolor); //获取画板画笔的颜色         x2=e.getX();         y2 =e.getY();         //选取画笔模式为直线时         if(btncontent.equals("直线")) {             g.setStroke(new BasicStroke(graphsize)); //保存画笔进行画图         g.drawLine(x1, y1, x2, y2);//画笔画直线         g3.setStroke(new BasicStroke(graphsize));//置画笔大小         g3.drawLine(x1, y1, x2, y2);         }         //选取画笔模式为波形时         else if(btncontent.equals("波形")) {             //波形函数             g.setStroke(new BasicStroke(graphsize)); //置画笔大小             g3.setStroke(new BasicStroke(graphsize));             double x4 = 0,y4 = 0;             double a2=1.40,b2=1.56,c2=1.40,d2=-6.56;             //波形函数             for(int i=0;i<5000;i++) {                 double x5=Math.sin(a2*x4)-Math.cos(b2*y4);                 double y5=Math.sin(c2*x4)-Math.cos(d2*y4);                 x4=x5;                 y4=y5;                 int px=(int)(x5*100+x1);                 int py=(int)(y5*100+y1);                 //画波形                 g.drawLine(px, py, px, py);                 g3.drawLine(px, py, px, py);                 }         }         //选取画笔模式为矩形时         else if(btncontent.equals("矩形")) {             g.setStroke(new BasicStroke(graphsize)); //获取矩形画笔的大小             g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));//画矩形             g3.setStroke(new BasicStroke(graphsize));              g3.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));         }         //选取的画笔模式为填充矩形         else if(btncontent.equals("填充矩形")){             //画填充矩形             g.fillRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));             g3.fillRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));         }         //长方体函数         else if(btncontent.equals("长方体")){             g.setStroke(new BasicStroke(graphsize));//获取长方体画笔大小              g.setColor(btn.getBackground());//将画笔颜色置选择画笔颜色按钮颜色              //长方体函数                 g.fillRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),Math.abs(y1-y2));                 g3.setStroke(new BasicStroke(graphsize));                  g3.setColor(btn.getBackground());                     g3.fillRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x1-x2),Math.abs(y1-y2));                 int a,b,c,d;                 a=Math.min(x1, x2);                 b=Math.max(x1, x2);                 c=Math.min(y1, y2);                 d=Math.max(y1, y2);                 int m=(int)((b-a)*Math.cos(Math.PI/4)*Math.sin(Math.PI/4));                 int n=(int)((b-a)*Math.cos(Math.PI/4)*Math.sin(Math.PI/4));                 //顶面                 g.setColor(btn.getBackground());                 g.fillPolygon(new int[] {a, a+m, b+m,b},new int[] {c,c-n,c-n,c},4);                 //右侧面                 g.setColor(btn.getBackground());                 g.fillPolygon(new int[] {b, b, b+m,b+m},new int[] {c,d,d-n,c-n},4);                 g3.setColor(btn.getBackground());                 g3.fillPolygon(new int[] {a, a+m, b+m,b},new int[] {c,c-n,c-n,c},4);                 //右侧面                 g3.setColor(btn.getBackground());                 g3.fillPolygon(new int[] {b, b, b+m,b+m},new int[] {c,d,d-n,c-n},4);         }         //分形函数         else if(btncontent.equals("分形")){             g.setStroke(new BasicStroke(graphsize));  //获取画笔大小             g3.setStroke(new BasicStroke(graphsize));             double x = 0,y = 0;             //分形函数实现             double a1=-1.8,b=-2.0,c=-0.5,d=-0.9;             for(int i=0;i<5000;i++) {             double x3=Math.sin(a1*y)-c*Math.cos(a1*x);             double y3=Math.sin(b*x)-d*Math.cos(b*y);             x=x3;             y=y3;             int px=(int)(x3*100+x1);             int py=(int)(y3*100+y1);             g.drawLine(px, py, px, py);             g3.drawLine(px, py, px, py);         }         }         //画圆         else if(btncontent.equals("圆")) {             g.setStroke(new BasicStroke(graphsize));//获取画笔大小             g.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));//画圆             g3.setStroke(new BasicStroke(graphsize));             g3.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));         }         //画填充圆         else if(btncontent.equals("填充圆")){             g.fillOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));//画填充圆             g3.fillOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));         }         //当选取模式为文字         else if(btncontent.equals("文字")){             //获取画笔大小             g.setStroke(new BasicStroke(15));         Font font = new Font(mode, Font.BOLD, Integer.parseInt(size)); //获得文字内容,文字大小,文字样式              g.setFont(font); //在画笔中置文字样式和大小             g.drawString(content, x1, y1); //写上文字内容             g3.setStroke(new BasicStroke(15));              g3.setFont(font);//放入文字样式和大小             g3.drawString(content, x1, y1);         }         //当画笔模式为弧线时         else if(btncontent.equals("弧线")){             g.setStroke(new BasicStroke(graphsize));//获取画笔大小             //弧线函数              g.drawArc(x1, y1, 100, 60, 0, 180);              g3.setStroke(new BasicStroke(graphsize));              g3.drawArc(x1, y1, 100, 60, 0, 180);         }         //九宫格递归,调用九宫格函数         else if(btncontent.equals("九宫格递归")) {             //九宫格递归实现               dg(0,50,600,600);           }         System.out.println("释放");     }     @Override     //鼠标进入方法     public void mouseEntered(MouseEvent e) {         System.out.println("进入");     }     @Override     //鼠标离开界面方法     public void mouseExited(MouseEvent e) {         System.out.println("离开");     }     @Override     public void mouseMoved(MouseEvent e) {     }     //重写鼠标移动函数     @Override     public void mouseDragged(MouseEvent e) {         g.setColor(graphcolor); //获取画笔颜色         g3.setColor(graphcolor);         // TODO Auto-generated method stub         x2=e.getX();         y2 =e.getY();         //当为画笔时         if(btncontent.equals("画笔")){         g.setStroke(new BasicStroke(graphsize));    //获取当前画笔大小                 //画笔实现                 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);                 g.drawLine(x1, y1, x2, y2);                 g3.setStroke(new BasicStroke(graphsize));                             g3.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);                 g3.drawLine(x1, y1, x2, y2);                 x1 = x2;                 y1 = y2;                 }         //橡皮擦          if(btncontent.equals("橡皮")){              //将画笔颜色置为背景颜色              g.setColor(background);              g3.setColor(background);             g.setStroke(new BasicStroke(30));    //将橡皮擦的大小置大小为30                                     g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);             g.drawLine(x1, y1, x2, y2);             g3.setStroke(new BasicStroke(30));                                         g3.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);             g3.drawLine(x1, y1, x2, y2);             x1 = x2;             y1 = y2;                //使用过后,将画笔颜色重新置为原来颜色             g.setColor(graphcolor);             g3.setColor(graphcolor);         }          //喷枪函数         else if(btncontent.equals("喷枪")){                 g.setStroke(new BasicStroke(graphsize));      //不用加粗,获取画笔大小                                         g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);                 g3.setStroke(new BasicStroke(graphsize));      //不用加粗                                         g3.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);                 //喷枪实现函数                 for(int k=0;k<20;k++){                     Random i=new Random();                            int a=i.nextInt(10);                     int b=i.nextInt(20);                     g.drawLine(x2+a, y2+b, x2+a, y2+b);                     g3.drawLine(x2+a, y2+b, x2+a, y2+b);         }         }     } }

画板演示:

保存图片:



JAVA 画板

需要 登录 后方可回复, 如果你还没有账号请 注册新账号