添加水印,改变鼠标图标,简笔画功能

添加水印所用到方法



方法名

方法说明

参数

参数说明

rotate(double theta)

设置绘图的旋转弧度,让图片旋转

double theta

旋转弧度

setFont(Font font)

设置字体

Font font

字体对象

setComposite(Composite comp)

设置图片绘制像素的方法,这次用来设置透明度

Composite comp

绘图合成借口

drawString(String str,intx,inty)

绘制文字

  1. String str
  2. int x
  3. int y


要绘制的文字

绘制的横坐标

绘制的纵坐标



改添加素材

如图,创建包img.icon和img.picture,并且从资源包里复制图片素材到该包




java用画图 java画图程序源代码_java用画图


DrawPictureFrame.java
package com.mr.draw;
 /**
  * 略略略略略略略
  */

//添加水印
import java.awt.AlphaComposite;
import java.awt.Font;//设置字体
import javax.swing.JOptionPane;//
//改变图标功能
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.Cursor;

public class DrawPictureFrame extends JFrame implements FrameGetShape{//继承窗体类
    //水印
    private JMenuItem shuiyinMenuItem;//水印菜单
    private String shuiyin ="";//水印字符内容
    
    //简笔画
    private PictureWindow picWindow;//简笔画展示窗体 
    private JButton showPicButton;//展开简笔画


    /**
     * 构造方法,添加组件的初始化方法
     */
    public DrawPictureFrame() {
        setResizable(false);                            //窗体不能改变大小
        setTitle("画图程序(水印内容:["+ shuiyin+ "])");//设置标题,添加水印内容
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭则停止程序
        setBounds(500,100,574,460);                    //设置窗口位置 Bounds:边界
        
        init();                                       //组件初始化  init();
        addListener();                                //添加组件监听
    }//DrawPictureFrame()结束

   /**
     * 组件初始化
     */
    private void init() {
         /**
          * 略略略略略略略
          */
        toolBar =new JToolBar();//初始化工具栏
        getContentPane().add(toolBar,BorderLayout.NORTH);//工具栏放至船体北方
        //简笔画放到保存前面
        showPicButton =new JButton("展开简笔画");//初始化按钮对象,并添加文本内容
        toolBar.add(showPicButton);工具栏添加按钮
         /**
          * 略略略略略略略
          */
        JMenu systemMenu =new JMenu("系统");//初始化菜单对象,并添加文本内容
        menuBar.add(systemMenu);//菜单栏添加菜单对象
        shuiyinMenuItem =new JMenuItem("设置水印");
        systemMenu.add(shuiyinMenuItem);
   }
}
    private void addListener() {
       /**
          * 略略略略略略略
          */
          //mouseDragged结束
            public void mouseMoved(final MouseEvent arg0) {
                if (rubber) {//如果使用橡皮
                    //设置鼠标指针的图形为图片
                    Toolkit kit = Toolkit.getDefaultToolkit();//获得系统默认的组件工具包
                    //使用工具包获得图片
                    Image img=kit.createImage("src/img/icon/鼠标橡皮.png");
                    //使用工具包创建一个自定义的光标对象
                    //参数为图片,光标热点写成0.0,和鼠标描述字符串
                    Cursor c =kit.createCustomCursor(img,new Point(0,0),"clear");
                    setCursor(c);//使用自定义的光标
                    }else {
                        //设置鼠标指针的形状为十字光体
                        setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
                    }
            }//mouseMoved结束
        });//addMouseMotion结束
        toolBar.addMouseMotionListener(new MouseMotionAdapter() {//工具栏添加鼠标移动监听
            public void mouseMoved(final MouseEvent arg0) {
                //设置鼠标指针为默认光标
                setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));    
            }
        });//toolBar.addMouseMotionListener结束

        
        canvas.addMouseListener(new MouseAdapter() {//画板添加鼠标单击事件监听
            public void mouseReleased(final MouseEvent arg0) {//当按键抬起时
                x=-1;  //将记录上一次鼠标绘制点的横坐标恢复成-1
                y=-1;  //将记录上一次鼠标绘制点的纵坐标恢复成-1
                
            }//mouseReleased结束
         //addMouseListener结束
        //保存图片
        saveButton.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent argo) {//单击时
                addWatermark();//添加水印
                DrawImageUtil.saveImage(DrawPictureFrame.this,image);//打印图片:打印当前窗体(DrawPictureFrame.this)为图片
                }
            });
        saveMenuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {//单击时
                addWatermark();//添加水印
                DrawImageUtil.saveImage(DrawPictureFrame.this,image);//打印图片:打印当前窗体(DrawPictureFrame.this)为图片
                }
            });
        //设置水印
        shuiyinMenuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {//单击时
                //弹出对话框
                shuiyin=JOptionPane.showInputDialog(DrawPictureFrame.this,"你想添加的水印:");
                if (null == shuiyin) {
                    shuiyin ="";//字符串为空内容
                }else {//如果不是null
                    setTitle("画图程序(水印内容:[" +shuiyin+"])");//修改窗体标题
                }
            }
        });
}//addlistener()结束
    /*
     * 添加水印
     */
    private void addWatermark() {
        if(!"".equals(shuiyin.trim())) {//如果水印字段不是空字符串
            g.rotate(Math.toRadians(-30));//将照片旋转-30
            Font font =new Font("楷体",Font.BOLD,72);//设置字体
            g.setFont(font);//载入字体
            g.setColor(Color.GRAY);//使用灰色
            AlphaComposite alpha=AlphaComposite.SrcOver.derive(0.4f);//设置透明效果
            g.setComposite(alpha);//使用透明效果
            g.drawString(shuiyin,150,500);//绘制文字
            canvas.repaint();//画板重绘
            g.rotate(Math.toRadians(30));//将旋转的图片转回来
            alpha =AlphaComposite.SrcOver.derive(1f);//不透明
            g.setComposite(alpha);//使用不透明效果
            g.setColor(foreColor);//画笔恢复之前颜色
        }//if结束
    }
添加简笔画

创建PictureWindow.java


java用画图 java画图程序源代码_初始化_02


package com.mr.draw;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JWindow;
import com.mr.util.BackgroundPanel;

/*
 * 简笔画展示窗体
 */
public class PictureWindow extends JWindow { 
    private JButton changeButton;  更换图片按钮
    private JButton hiddenButton;  //隐藏按钮
    private BackgroundPanel centerPanel;//展示图片的带背景图画板
    File list[];//当前选中的图片索引
    int index;  //父窗体
    DrawPictureFrame frame;
    /*
     * 构造方法
     * @param frame父窗体
     */
    public PictureWindow(DrawPictureFrame frame) {
        this.frame =frame;//构造参数的值赋值给父窗口
        setSize(400,460);  //设置窗体宽高
        init(); //初始化窗体组件
        addListener(); //给组件添加监听
    }//PictureWindow
    /*
     * 组件初始化方法
     */
    private void init() {
        Container c=getContentPane(); //获取窗体主容器
        File dir =new File("src/img/picture");  //创建简笔画素材文件夹对象
        list =dir.listFiles();//获取文件夹里的所有文件
        //初始化背景面板,使用图片文件夹里的第一张简笔画
        centerPanel =new BackgroundPanel(getListImage());
        c.add(centerPanel,BorderLayout.CENTER);
        FlowLayout flow =new FlowLayout(FlowLayout.RIGHT);//创建右对齐的流布局
        flow.setHgap(20);//水平间隔20像素
        JPanel southPanel =new JPanel();//创建南部面板
        southPanel.setLayout(flow);//南部面板使用刚才创建好的流布局
        changeButton =new JButton("更换图片");//实例化"更换图片"按钮
        southPanel.add(changeButton);//南部面板添加按钮
        hiddenButton =new JButton("隐藏");//实例化"隐藏"按钮
        southPanel.add(hiddenButton);//南部面板添加按钮
        c.add(southPanel,BorderLayout.SOUTH);//南部面板放到主容器的南部位置位置
    }//init结束
    /*
     * 添加监听
     */
    private void addListener() {
        hiddenButton.addActionListener(new ActionListener() {//隐藏按钮添加动作监听
            public void actionPerformed(ActionEvent e) {//单击时
                setVisible(false);//本窗体不可见
                frame.initShowPicButton();//父窗体还原简笔画按钮文本的内容
            }
        });//hiddenButton结束
        changeButton.addActionListener(new ActionListener() {//隐藏按钮添加动作监听
            public void actionPerformed(ActionEvent e) {//单击时
                centerPanel.setImage(getListImage());//背景面板重新载入图片
            }
            });//changeButton.addActionListener结束
    }//addListeners结束
    /*
     * 获取图片文件夹下的图片,每次调用此方法,都会获得不同的文件对象
     */
    
    private Image getListImage() {
        String imgPath =list[index].getAbsolutePath();//获取当前索引下的图片文件路径
        ImageIcon image =new ImageIcon(imgPath);//获取此图片文件的图标对象
        index++;//索引变量递增
        if(index >=list.length) {//如果索引变量超过图片数量
            index =0;//索引归零
        }
        return image.getImage();//获得图标对象的图片对象
        }//getListImage结束
    }//PictureWindow 结束
功能实现


java用画图 java画图程序源代码_学习_03


按钮美化

DrawPictureFrame.java

package com.mr.draw;
 /**
  * 略略略略略略略
  */
import javax.swing.ImageIcon;

//后面的直接复制粘贴了

//引入窗体类

//alt+/   快速导入

public class DrawPictureFrame extends JFrame implements FrameGetShape{//继承窗体类
    //创建一个8位BGR颜色分量的图像
    BufferedImage image =new BufferedImage(570,390,BufferedImage.TYPE_INT_BGR);
    Graphics gs=image.getGraphics();//获得图像的绘画对象
    Graphics2D g=(Graphics2D) gs;  //获得绘画对象转换为Graphics2D类型
    DrawPictureCanvas canvas =new DrawPictureCanvas();//创建画布对象
    Color foreColor=Color.BLACK;//定义前景色 棕色
    Color backgroundColor =Color.WHITE; //定义背景色 白色
    //鼠标事件
    int x=-1;             //上次鼠标绘制点的横坐标
    int y=-1;             //上次鼠标绘制点的纵坐标
    boolean rubber=false; //橡皮标识变量
    
    private JToolBar toolBar;//工具栏
    private JButton eraserButton;//橡皮
    private JToggleButton strokeButton1;//细线按钮
    private JToggleButton strokeButton2;//粗线按钮
    private JToggleButton strokeButton3;//较粗按钮
    private JButton backgroundButton;//背景色按钮
    private JButton foregroundButton;//前背景色按钮
    private JButton clearButton;//清除按钮
    private JButton saveButton;//保存按钮
    private JButton shapeButton;//图像按钮
    
    boolean drawShape =false;//画图形标志变量
    Shapes shape;//绘制图形
    
    //菜单
    private JMenuItem strokeMenuItem1;//细线菜单
    private JMenuItem strokeMenuItem2;//粗线菜单
    private JMenuItem strokeMenuItem3;//较粗
    private JMenuItem clearMenuItem;//清除菜单
    private JMenuItem foregroundMenuItem;//前景菜单
    private JMenuItem backgroundMenuItem;   
    private JMenuItem eraserMenuItem;//橡皮菜单
    private JMenuItem exitMenuItem;//跳出菜单
    private JMenuItem saveMenuItem;//保存菜单

    //水印
    private JMenuItem shuiyinMenuItem;//水印菜单
    private String shuiyin ="";//水印字符内容
    
    //简笔画
    private PictureWindow picWindow;//简笔画展示窗体 
    private JButton showPicButton;//展开简笔画

    /**
     * 构造方法,添加组件的初始化方法
     */
    public DrawPictureFrame() {
        setResizable(false);                            //窗体不能改变大小
        setTitle("画图程序(水印内容:["+ shuiyin+ "])");//设置标题,添加水印内容
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭则停止程序
        setBounds(500,100,574,460);                    //设置窗口位置 Bounds:边界
        
        init();                                       //组件初始化  init();
        addListener();                                //添加组件监听
    }//DrawPictureFrame()结束
    /**
     * 组件初始化
     */
    private void init() {
        g.setColor(backgroundColor);//用背景色设置绘图对象的颜色
        g.fillRect(0, 0, 570, 390);//使用背景色填充整个画布
        g.setColor(foreColor);     //设置画布的图像
        canvas.setImage(image);//设置画布的图像
        getContentPane().add(canvas);//将画布添加到窗体容器默认布局的中部位置
        
        toolBar =new JToolBar();//初始化工具栏
        getContentPane().add(toolBar,BorderLayout.NORTH);//工具栏放至船体北方
        //简笔画
        //showPicButton =new JButton("展开简笔画");//初始化按钮对象,并添加文本内容
        showPicButton =new JButton();
        showPicButton.setToolTipText("展开简笔画");//设置鼠标悬停提示
        showPicButton.setIcon(new ImageIcon("src/img/icon/展开.png"));//设置鼠标图案
        toolBar.add(showPicButton);工具栏添加按钮
        
        //saveButton=new JButton("保存");//初始化按钮对象,并添加文本内容
        saveButton=new JButton();
        saveButton.setToolTipText("保存");
        saveButton.setIcon(new ImageIcon("src/img/icon/保存.png"));
        toolBar.add(saveButton);//工具栏添加按钮
        toolBar.addSeparator();//添加分割线
        //初始化有选中状态的按钮对象,并添加文本
        strokeButton1 =new JToggleButton();
        strokeButton1.setToolTipText("细线");
        strokeButton1.setIcon(new ImageIcon("src/img/icon/1像素线条.png"));
        strokeButton1.setSelected(true);//细线按钮处于选中状态
        toolBar.add(strokeButton1);//工具栏添加按钮
        
        strokeButton2 =new JToggleButton();
        strokeButton2.setToolTipText("粗线");
        strokeButton2.setIcon(new ImageIcon("src/img/icon/2像素线条.png"));
        toolBar.add(strokeButton2);//工具栏添加按钮
        
        strokeButton3 =new JToggleButton();
        strokeButton3.setToolTipText("较粗");
        strokeButton3.setIcon(new ImageIcon("src/img/icon/4像素线条.png"));
        
        //把上面三个按顺序,画笔粗细按钮组,保证同时只有一个按钮被选中
        ButtonGroup strokeGroup =new ButtonGroup();
        strokeGroup.add(strokeButton1);//按钮组添加按钮
        strokeGroup.add(strokeButton2);
        strokeGroup.add(strokeButton3);
        toolBar.add(strokeButton3);//工具栏添加按钮
        toolBar.addSeparator();//添加分割线
        
        backgroundButton=new JButton("");//初始化按钮对象,并添加文本内容
        backgroundButton.setToolTipText("背景颜色");
        backgroundButton.setIcon(new ImageIcon("src/img/icon/背景色.png"));
        toolBar.add(backgroundButton);//工具栏添加按钮
        foregroundButton =new JButton();
        foregroundButton.setToolTipText("画笔颜色");
        foregroundButton.setIcon(new ImageIcon("src/img/icon/前景色.png"));
        toolBar.add(foregroundButton);
        toolBar.addSeparator();//添加分割线
        
        shapeButton =new JButton();
        shapeButton.setToolTipText("图形");
        shapeButton.setIcon(new ImageIcon("src/img/icon/形状.png"));
        toolBar.add(shapeButton);
        
        clearButton =new JButton();
        clearButton.setToolTipText("清除");
        clearButton.setIcon(new ImageIcon("src/img/icon/清除.png"));
        toolBar.add(clearButton);
        
        eraserButton =new JButton();
        eraserButton.setToolTipText("橡皮");
        eraserButton.setIcon(new ImageIcon("src/img/icon/橡皮.png"));
        toolBar.add(eraserButton);//工具栏添加按钮
        
        //添加菜单栏
        JMenuBar menuBar=new JMenuBar();//创建菜单栏
        setJMenuBar(menuBar);//窗体载入菜单栏
        //系统内容
        JMenu systemMenu =new JMenu("系统");//初始化菜单对象,并添加文本内容
        menuBar.add(systemMenu);//菜单栏添加菜单对象
        shuiyinMenuItem =new JMenuItem("设置水印");
        systemMenu.add(shuiyinMenuItem);
        saveMenuItem=new JMenuItem("保存");
        systemMenu.add(saveMenuItem);//菜单添加菜单项
        //创建简笔画展示画笔,并将本类当作它的父窗体
        picWindow =new PictureWindow(DrawPictureFrame.this);
        systemMenu.addSeparator();//添加分割线
        exitMenuItem =new JMenu("退出");//
        systemMenu.add(exitMenuItem);
        JMenu strokeMenu=new JMenu("线型");//初始菜单对象,并添加文本内容
        menuBar.add(strokeMenu);//菜单添加菜单对象
        strokeMenuItem1 =new JMenuItem("细线");
        strokeMenu.add(strokeMenuItem1);
        strokeMenuItem2 =new JMenuItem("粗线");
        strokeMenu.add(strokeMenuItem2);
        strokeMenuItem3 =new JMenuItem("较粗");
        strokeMenu.add(strokeMenuItem3);
        
        JMenu colorMenu =new JMenu("颜色");
        menuBar.add(colorMenu);
        foregroundMenuItem=new JMenuItem("画笔颜色");
        colorMenu.add(foregroundMenuItem);
        backgroundMenuItem=new JMenuItem("背景颜色");
        colorMenu.add(backgroundMenuItem);
        
        JMenu editMenu =new JMenu("编辑");
        menuBar.add(editMenu);
        clearMenuItem =new JMenuItem("清除");
        editMenu.add(clearMenuItem);
        eraserMenuItem =new JMenuItem("橡皮");
        editMenu.add(eraserMenuItem);
    }//init()结束
    /**
     * 为组件添加鼠标移动事件监听
     */
    private void addListener() {
        //画板添加鼠标移动事件监听
        canvas.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseDragged(final MouseEvent e) {   //当鼠标拖拽时
                if(x>0 && y>0) {   //如果x和y存在鼠标记录
                    if(rubber) {   //橡皮标识为true,表示使用橡皮
                        g.setColor(backgroundColor);   //绘图工具使用背景色
                        g.fillRect(x, y,10,10);//在鼠标划过的位置画填充的正方形
                    }else {
                        g.drawLine(x, y,e.getX(),e.getY());//在鼠标划过的位置画直线
                    }
                }//if结束
                x=e.getX();
                y=e.getY();
                canvas.repaint();  //更新画布
            }
            public void mouseMoved(final MouseEvent arg0) {
                if (rubber) {//如果使用橡皮
                    //设置鼠标指针的图形为图片
                    Toolkit kit = Toolkit.getDefaultToolkit();//获得系统默认的组件工具包
                    //使用工具包获得图片
                    Image img=kit.createImage("src/img/icon/鼠标橡皮.png");
                    //使用工具包创建一个自定义的光标对象
                    //参数为图片,光标热点写成0.0,和鼠标描述字符串
                    Cursor c =kit.createCustomCursor(img,new Point(0,0),"clear");
                    setCursor(c);//使用自定义的光标
                    }else {
                        //设置鼠标指针的形状为十字光体
                        setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
                    }
            }//mouseMoved结束
        });//addMouseMotion结束
        toolBar.addMouseMotionListener(new MouseMotionAdapter() {//工具栏添加鼠标移动监听
            public void mouseMoved(final MouseEvent arg0) {
                //设置鼠标指针为默认光标
                setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));    
            }
        });//toolBar.addMouseMotionListener结束

        
        canvas.addMouseListener(new MouseAdapter() {//画板添加鼠标单击事件监听
            public void mouseReleased(final MouseEvent arg0) {//当按键抬起时
                x=-1;  //将记录上一次鼠标绘制点的横坐标恢复成-1
                y=-1;  //将记录上一次鼠标绘制点的纵坐标恢复成-1
                
            }//mouseReleased结束
            
            //添加鼠标按下时触发的方法,图形
            public void mousePressed(MouseEvent e) {
                if (drawShape) {//如果此时我鼠标画的是图形
                    switch(shape.getType()) {//判断图形的种类
                    case Shapes.YUAN://如果是圆形
                        //计算坐标,让鼠标处于图形的中心位置
                        int yuanX =e.getX() -shape.getWidth()/2;
                        int yuanY =e.getY() -shape.getHeigth()/2;
                        //创建圆形,并指定坐标和宽高
                        Ellipse2D yuan=new Ellipse2D.Double(yuanX,yuanY,shape.getWidth(),shape.getHeigth());
                        g.draw(yuan);//画图工具画此圆形
                        break;
                    case Shapes.FANG:
                        //计算坐标,让鼠标处于图形的中心位置
                        int fangX =e.getX() -shape.getWidth()/2;
                        int fangY =e.getY() -shape.getHeigth()/2;
                        //创建方形,并指定坐标和宽高
                        Rectangle2D fang =new Rectangle2D.Double(fangX,fangY,shape.getWidth(),shape.getHeigth());
                        g.draw(fang);
                        break;
                    }
                    canvas.repaint();//更新画笔
                    //画图形标识变量为false ,说明选择鼠标画的是图形
                    drawShape=false;//画完图形之后,回到画笔状态
                }
            }//图形结束
            
        });//结束canvas.addMouseListener
        strokeButton1.addActionListener(new ActionListener() {//"细线“按钮添加动作监听
            public void actionPerformed(final ActionEvent arg0) {//单击时
                //声明画笔属性,粗细为1像素,线条末端无修饰,折线处呈尖角
                BasicStroke bs =new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER);
                g.setStroke(bs);//画图工具使用此画笔
            }
            
        });
        strokeButton2.addActionListener(new ActionListener() {//"细线“按钮添加动作监听
            public void actionPerformed(final ActionEvent arg0) {//单击时
                //声明画笔属性,粗细为2像素,线条末端无修饰,折线处呈尖角
                BasicStroke bs =new BasicStroke(2,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER);
                g.setStroke(bs);//画图工具使用此画笔
            }
            
        });
        strokeButton3.addActionListener(new ActionListener() {//"细线“按钮添加动作监听
            public void actionPerformed(final ActionEvent arg0) {//单击时
                //声明画笔属性,粗细为3像素,线条末端无修饰,折线处呈尖角
                BasicStroke bs =new BasicStroke(3,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER);
                g.setStroke(bs);//画图工具使用此画笔
            }
            
        });
        //背景颜色
        backgroundButton.addActionListener(new ActionListener() {//背景色按钮添加动作监听:ActionListener
            public void actionPerformed(final ActionEvent arg0) {
                //单击时打开颜色对话框,参数依次为:父窗体,标题,默认选中的颜色(青色)
                Color bgColor =JColorChooser.showDialog(DrawPictureFrame.this,"颜色对话框",Color.CYAN);
                if (bgColor !=null) {//如果选中的颜色不是空的
                    backgroundColor=bgColor;//将选中的颜色赋给背景色变量
                }
                //背景色按钮也更换为这种颜色
                backgroundButton.setBackground(backgroundColor);
                g.setColor(backgroundColor);//绘图工具使用颜色
                g.fillRect(0,0,570,390);//画一个背景颜色的方形填满整个画布
                g.setColor(foreColor);//画图工具使用前景色
                canvas.repaint();//更新画布
                
            }
        });//backgroundButton.addActionListener结束
        //画笔颜色--前景色
        foregroundButton.addActionListener(new ActionListener() {//背景色按钮添加动作监听:ActionListener
            public void actionPerformed(final ActionEvent arg0) {
                //单击时打开颜色对话框,参数依次为:父窗体,标题,默认选中的颜色(青色)
                Color fColor =JColorChooser.showDialog(DrawPictureFrame.this,"颜色对话框",Color.CYAN);
                if (fColor !=null) {//如果选中的颜色不是空的
                    backgroundColor=fColor;//将选中的颜色赋给背景色变量
                }
                //背景色按钮也更换为这种颜色
                foregroundButton.setBackground(foreColor);
                g.setColor(foreColor);//绘图工具使用颜色
                
                
            }
        });
        
        //清除与橡皮按钮事件实现
        clearButton.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent arg0) {
                g.setColor(backgroundColor);
                g.fillRect(0,0,570,390);//画一个背景颜色的方形填满整个画布,实现清除功能
                g.setColor(foreColor);//画图工具使用画笔颜色
                canvas.repaint();//更新画布
            }
        });
        eraserButton.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent arg0) {
                if(rubber){//单击按钮,使用橡皮
                eraserButton.setToolTipText("橡皮");//鼠标悬停显示
                //设置鼠标图案
                eraserButton.setIcon(new ImageIcon("src/img/icon/橡皮.png"));
                eraserMenuItem.setText("橡皮");
                g.setColor(foreColor);
                rubber = false;
            }else {
                eraserMenuItem.setText("画图");
                eraserButton.setToolTipText("画图");
                //设置鼠标按钮
                eraserButton.setIcon(new ImageIcon("src/img/icon/画笔.png"));
                g.setColor(backgroundColor);
                rubber =true;
            }
                }
        });//橡皮结束
        
        //图形
        shapeButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {//单击时
                
                ShapeWindow shapeWindow=new ShapeWindow(DrawPictureFrame.this);//创建图形选择组件
                int shapeButtonWidth = shapeButton.getWidth();//获取图形按钮宽度
                int shapeWindowWidth = shapeWindow.getWidth();//获取图形按钮高度
                int shapeButtonX =shapeButton.getX();//获取图形按钮横坐标
                int shapeButtonY =shapeButton.getY();//获取图形按钮纵坐标
                //计算图形组件横坐标,让组件与“图形”按钮居中对齐
                int shapeWindowX =getX() +shapeButtonX-(shapeWindowWidth -shapeButtonWidth)/2;
                //计算图形组件纵坐标,让组件与“图形”按钮下方
                int shapeWindowY =getY()+shapeButtonY+80;
                //设置图形组件坐标位置
                shapeWindow.setLocation(shapeWindowX,shapeWindowY);
                shapeWindow.setVisible(true);//图形可见
                
                
            }
        });//图形结束
        
        //保存图片
        saveButton.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent argo) {//单击时
                addWatermark();//添加水印
                DrawImageUtil.saveImage(DrawPictureFrame.this,image);//打印图片:打印当前窗体(DrawPictureFrame.this)为图片
                }
            });
        /**
         * 菜单监听,基本和前面的一样,修改为saveMenuItem.
         */
        saveMenuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {//单击时
                addWatermark();//添加水印
                DrawImageUtil.saveImage(DrawPictureFrame.this,image);//打印图片:打印当前窗体(DrawPictureFrame.this)为图片
                }
            });
        //设置水印
        shuiyinMenuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {//单击时
                //弹出对话框
                shuiyin=JOptionPane.showInputDialog(DrawPictureFrame.this,"你想添加的水印:");
                if (null == shuiyin) {
                    shuiyin ="";//字符串为空内容
                }else {//如果不是null
                    setTitle("画图程序(水印内容:[" +shuiyin+"])");//修改窗体标题
                }
            }
        });
        
        //清除与橡皮按钮事件实现
        clearMenuItem.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent arg0) {
                g.setColor(backgroundColor);
                g.fillRect(0,0,570,390);//画一个背景颜色的方形填满整个画布,实现清除功能
                g.setColor(foreColor);//画图工具使用画笔颜色
                canvas.repaint();//更新画布
            }
        });
        eraserMenuItem.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent arg0) {
                if(rubber) {
                    eraserButton.setToolTipText("橡皮");//鼠标悬停显示
                    eraserButton.setIcon(new ImageIcon("src/img/icon/橡皮.png"));
                    eraserMenuItem.setText("橡皮");
                    g.setColor(foreColor);
                    rubber =false;
                }else {
                    eraserButton.setToolTipText("画图");//鼠标悬停显示
                    eraserButton.setIcon(new ImageIcon("src/img/icon/画笔.png"));
                    eraserMenuItem.setText("画图");
                    g.setColor(backgroundColor);
                    rubber =true;
                }
            }
        });//橡皮结束
        //背景颜色
        backgroundMenuItem.addActionListener(new ActionListener() {//背景色按钮添加动作监听:ActionListener
            public void actionPerformed(final ActionEvent arg0) {
                //单击时打开颜色对话框,参数依次为:父窗体,标题,默认选中的颜色(青色)
                Color bgColor =JColorChooser.showDialog(DrawPictureFrame.this,"颜色对话框",Color.CYAN);
                if (bgColor !=null) {//如果选中的颜色不是空的
                    backgroundColor=bgColor;//将选中的颜色赋给背景色变量
                }
                //背景色按钮也更换为这种颜色
                backgroundButton.setBackground(backgroundColor);
                g.setColor(backgroundColor);//绘图工具使用颜色
                g.fillRect(0,0,570,390);//画一个背景颜色的方形填满整个画布
                g.setColor(foreColor);//画图工具使用前景色
                canvas.repaint();//更新画布
                
            }
        });//backgroundButton.addActionListener结束
        //画笔颜色--前景色
        foregroundMenuItem.addActionListener(new ActionListener() {//背景色按钮添加动作监听:ActionListener
            public void actionPerformed(final ActionEvent arg0) {
                //单击时打开颜色对话框,参数依次为:父窗体,标题,默认选中的颜色(青色)
                Color bgColor =JColorChooser.showDialog(DrawPictureFrame.this,"颜色对话框",Color.CYAN);
                if (bgColor !=null) {//如果选中的颜色不是空的
                    backgroundColor=bgColor;//将选中的颜色赋给背景色变量
                }
                //背景色按钮也更换为这种颜色
                foregroundButton.setBackground(foreColor);//画笔颜色也更换为这种颜色
                g.setColor(backgroundColor);//绘图工具使用颜色
                
                
            }
        });    
        strokeMenuItem1.addActionListener(new ActionListener() {//"细线“按钮添加动作监听
            public void actionPerformed(final ActionEvent arg0) {//单击时
                //声明画笔属性,粗细为1像素,线条末端无修饰,折线处呈尖角
                BasicStroke bs =new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER);
                g.setStroke(bs);//画图工具使用此画笔
                strokeButton1.setSelected(true);//细线按钮为选中状态
            }
            
        });
        strokeMenuItem2.addActionListener(new ActionListener() {//"细线“按钮添加动作监听
            public void actionPerformed(final ActionEvent arg0) {//单击时
                //声明画笔属性,粗细为2像素,线条末端无修饰,折线处呈尖角
                BasicStroke bs =new BasicStroke(2,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER);
                g.setStroke(bs);//画图工具使用此画笔
                strokeButton2.setSelected(true);
            }
            
        });
        strokeMenuItem3.addActionListener(new ActionListener() {//"细线“按钮添加动作监听
            public void actionPerformed(final ActionEvent arg0) {//单击时
                //声明画笔属性,粗细为3像素,线条末端无修饰,折线处呈尖角
                BasicStroke bs =new BasicStroke(3,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER);
                g.setStroke(bs);//画图工具使用此画笔
                strokeButton3.setSelected(true);
            }
            
        });//画笔结束
        //简笔画
        showPicButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                boolean isVisible =picWindow.isVisible();//获取简笔画展示窗体可见状态
                if(isVisible){//如果简笔画展示窗体是可见的
                    showPicButton.setToolTipText("展开简笔画");
                    showPicButton.setIcon(new ImageIcon("src/img/icon/展开.png"));
                    picWindow.setVisible(false);//隐藏简笔画展示窗体
                }else {
                    showPicButton.setToolTipText("隐藏简笔画");
                    showPicButton.setIcon(new ImageIcon("src/img/icon/隐藏.png"));
                    //重新指定简笔画展示窗体的显示位置
                    //横坐标 =主窗体横坐标 -简笔画窗体宽度-5
                    //纵坐标 =主窗体纵坐标
                    picWindow.setLocation(getX()-picWindow.getWidth()-5,getY());
                    picWindow.setVisible(true);//简笔画展示窗体可见
                    }
            }
        });//showPicButton.addActionListener结束

        
        
    }//组件监听结束
    /*
     * 恢复展开简笔画按钮的文本内容,此方法共简笔画画笔的”隐藏“按钮可调用
     */
    public void initShowPicButton() {
        showPicButton.setToolTipText("展开简笔画");
        showPicButton.setIcon(new ImageIcon("src/img/icon/展开.png"));
    }//initShowPicButton结束
    
    /*
     * 添加水印
     */
    private void addWatermark() {
        if(!"".equals(shuiyin.trim())) {//如果水印字段不是空字符串
            g.rotate(Math.toRadians(-30));//将照片旋转-30
            Font font =new Font("楷体",Font.BOLD,72);//设置字体
            g.setFont(font);//载入字体
            g.setColor(Color.GRAY);//使用灰色
            AlphaComposite alpha=AlphaComposite.SrcOver.derive(0.4f);//设置透明效果
            g.setComposite(alpha);//使用透明效果
            g.drawString(shuiyin,150,500);//绘制文字
            canvas.repaint();//画板重绘
            g.rotate(Math.toRadians(30));//将旋转的图片转回来
            alpha =AlphaComposite.SrcOver.derive(1f);//不透明
            g.setComposite(alpha);//使用不透明效果
            g.setColor(foreColor);//画笔恢复之前颜色
        }//if结束
    }
  
    //FrameGetShape接口实现类,用于获得图形空间返回的被选中的图形
    @Override
    public void getShape(Shapes shape) {
        this.shape =shape;//将反回的图形对象赋给类的全局变量
        drawShape =true; //画图形标识变量为true,声明现在鼠标画的是图形,而不是线条    
    }//结束
    
    public static void main(String[] args) {
        DrawPictureFrame frame=new DrawPictureFrame();//创建窗体对象
        frame.setVisible(true);//让窗口可见
    }//main()结束
    //主类结束

}


java用画图 java画图程序源代码_学习_04


好啦,本次项目就做到这里啦,期待下一项吧~