• 在日常生活中画图软件给我们带来了许多便利,往大了说可以用它来制作图标,往小了说也可以当做一个涂鸦板消磨时间。
    比如:制作个图标

    用来画画:

    这个画图程序界面如上,这个程序的功能如下:
    1.可更改的画笔粗细(1.细线 2.较粗线 3.粗线),效果如下:

    1. 更改背景颜色:

      3.更改画笔颜色:

      4.清除功能:

      5.橡皮涂擦功能:

      6.添加图片水印:

      我们该如何制作这个软件呢?代码如下:

1. 首先,创建一个DrawPirtureFrame类:

package com.tcz.draw;import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;import java.awt.color.*;
import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;public class DrawPictureFrame extends JFrame {BufferedImage image = new BufferedImage(1160, 830, BufferedImage.TYPE_INT_BGR);Graphics gs = image.getGraphics();Graphics2D g = (Graphics2D) gs;DrawPictureCanvas canvas = new DrawPictureCanvas();Color forecColor = 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 foreroundButton;private JButton clearButton;private JButton savebButton;private JButton shapeButton;private JMenuItem strokeMenuItem1;private JMenuItem strokeMenuItem2;private JMenuItem strokeMenuItem3;private JMenuItem clearMenuItem;private JMenuItem foregroundMenuItem;private JMenuItem backgroundItem;private JMenuItem eraserMenuItem;private JMenuItem exitMenuItem;private JMenuItem saveMenuItem;private String shuiyin = "";private JMenuItem shuiyinMenuItem;public DrawPictureFrame() {setResizable(false);//设为不可更改大小setTitle("画图程序(水印内容:[" + shuiyin + "])");setDefaultCloseOperation(EXIT_ON_CLOSE);setBounds(500, 100, 1160, 920);init();addListener();}private void init() {g.setColor(backgroundColor);g.fillRect(0, 0, 1160, 830);g.setColor(forecColor);canvas.setImage(image);getContentPane().add(canvas);toolBar = new JToolBar();getContentPane().add(toolBar, BorderLayout.NORTH);//将工具栏放在窗体上边/** 设置各组件位置*/savebButton = new JButton("保存");savebButton.setToolTipText("保存");toolBar.add(savebButton);toolBar.addSeparator();strokeButton1 = new JToggleButton("细线");strokeButton1.setSelected(true);toolBar.add(strokeButton1);strokeButton2 = new JToggleButton("较粗线");toolBar.add(strokeButton2);strokeButton3 = new JToggleButton("粗线");ButtonGroup strokeGroup = new ButtonGroup();strokeGroup.add(strokeButton1);strokeGroup.add(strokeButton2);strokeGroup.add(strokeButton3);toolBar.add(strokeButton3);toolBar.addSeparator();backgroundButton = new JButton("背景颜色");toolBar.add(backgroundButton);foreroundButton = new JButton("画笔颜色");toolBar.add(foreroundButton);toolBar.addSeparator();clearButton = new JButton("清除");toolBar.add(clearButton);eraserButton = new JButton("橡皮");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);systemMenu.addSeparator();exitMenuItem = new JMenuItem("退出");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);backgroundItem = new JMenuItem("背景颜色");colorMenu.add(backgroundItem);JMenu editMenu = new JMenu("编辑");menuBar.add(editMenu);clearMenuItem = new JMenuItem("清除");editMenu.add(clearMenuItem);eraserMenuItem = new JMenuItem("橡皮");editMenu.add(eraserMenuItem);}private void addListener() {canvas.addMouseMotionListener(new MouseMotionAdapter() {public void mouseDragged(final MouseEvent e) {if (x > 0 && y > 0) {if (rubber) {g.setColor(backgroundColor);g.fillRect(x, y, 20, 20);} else {g.drawLine(x, y, e.getX(), e.getY());}}x = e.getX();y = e.getY();canvas.repaint();}@Overridepublic void mouseMoved(MouseEvent e) {if (rubber) {Toolkit kit = Toolkit.getDefaultToolkit();setCursor(DEFAULT_CURSOR);//设置鼠标显示样式} else {setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));}}});canvas.addMouseListener(new MouseAdapter() {public void mouseReleased(final MouseEvent arg0) {x = -1;y = -1;}});strokeButton1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {BasicStroke bs = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);g.setStroke(bs);}});strokeButton2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {BasicStroke bs = new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);g.setStroke(bs);}});strokeButton3.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {BasicStroke bs = new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);g.setStroke(bs);}});backgroundButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {Color bgColor = JColorChooser.showDialog(DrawPictureFrame.this, "选择颜色对话框", Color.CYAN);if (bgColor != null) {backgroundColor = bgColor;}backgroundButton.setBackground(backgroundColor);g.setColor(backgroundColor);g.fillRect(0, 0, 1160, 830);g.setColor(forecColor);canvas.repaint();}});foreroundButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {Color fColor = JColorChooser.showDialog(DrawPictureFrame.this, "选择颜色对话框", Color.CYAN);if (fColor != null) {forecColor = fColor;}foreroundButton.setBackground(forecColor);g.setColor(forecColor);}});clearButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {g.setColor(backgroundColor);g.fillRect(0, 0, 1160, 830);g.setColor(forecColor);canvas.repaint();}});eraserButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (eraserButton.getText().equals("橡皮")) {rubber = true;eraserMenuItem.setText("画图");eraserButton.setText("画图");} else {rubber = false;eraserMenuItem.setText("橡皮");eraserButton.setText("橡皮");g.setColor(forecColor);}}});savebButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {addWatermark();}});// 细线菜单项strokeMenuItem1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {BasicStroke bs = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);g.setStroke(bs);}});// 较粗线菜单项strokeMenuItem2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {BasicStroke bs = new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);g.setStroke(bs);}});// 粗线菜单项strokeMenuItem3.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {BasicStroke bs = new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);g.setStroke(bs);}});foregroundMenuItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {Color fColor = JColorChooser.showDialog(DrawPictureFrame.this, "选择颜色对话框", Color.CYAN);if (fColor != null) {forecColor = fColor;}foreroundButton.setBackground(forecColor);g.setColor(forecColor);}});backgroundItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {Color bgColor = JColorChooser.showDialog(DrawPictureFrame.this, "选择颜色对话框", Color.CYAN);if (bgColor != null) {backgroundColor = bgColor;}backgroundButton.setBackground(backgroundColor);g.setColor(backgroundColor);g.fillRect(0, 0, 1160, 830);g.setColor(forecColor);canvas.repaint();}});clearMenuItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {g.setColor(backgroundColor);g.fillRect(0, 0, 1160, 830);g.setColor(forecColor);canvas.repaint();}});eraserMenuItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (eraserButton.getText().equals("橡皮")) {rubber = true;eraserButton.setText("画图");eraserMenuItem.setText("画图");} else {rubber = false;eraserButton.setText("橡皮");eraserMenuItem.setText("橡皮");g.setColor(forecColor);}}});exitMenuItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.exit(0);}});shuiyinMenuItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {shuiyin = JOptionPane.showInputDialog(DrawPictureFrame.this, "你想添加什么水印?");if (null == shuiyin) {shuiyin = "";} else {setTitle("画图程序(水印内容:[" + shuiyin + "])");}}});toolBar.addMouseMotionListener(new MouseMotionAdapter() {//工具栏添加鼠标事件监听@Overridepublic void mouseMoved(MouseEvent e) {setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));//设置鼠标的形状为默认光标}});}private void addWatermark() {if (!"".equals(shuiyin.trim())) {// 如果水印字段不是空字符串g.rotate(Math.toRadians(-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, 350, 900);canvas.repaint();g.rotate(Math.toRadians(30));// 将旋转的图片再转回来alpha = AlphaComposite.SrcOver.derive(1f);// 不透明效果g.setComposite(alpha);// 使用不透明效果g.setColor(forecColor);// 画笔恢复之前的颜色}}public static void main(String[] args) {DrawPictureFrame frame = new DrawPictureFrame();frame.setVisible(true);}}

2.创建第二个类:

package com.tcz.draw;import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Image;public class DrawPictureCanvas extends Canvas{private Image image=null;public void setImage(Image image) {this.image=image;}@Overridepublic void paint(Graphics g) {g.drawImage(image, 0, 0, null);}public void update(Graphics g) {paint(g);}

心动不如行动,编写一个画图程序,体验绘画之美!更多有趣的功能等你来体验哦!

用JAVA制作一个画图程序相关推荐

  1. 用JAVA写一个画图程序(课程设计)

    1.设计思路 首先我直接去了Windows自带画图程序去实践模拟,看看具体方法,进行了布局和按钮的思考. 容器顶层放工具栏,工具栏中存放图形按钮.工具按钮.颜色按钮.对于图形按钮,存放在垂直的Box中 ...

  2. Java制作一个盒子程序_编写一个简单的Java程序,模拟计算器的功能。

    提问:编写一个简单的Java程序,模拟计算器的功能. 网友回答: 程序参考: import java.awt.*; import java.awt.event.ActionEvent; import ...

  3. java制作一个应用程序_一个制作java小应用程序的全过程

    一个制作java小应用程序的全过程 一.安装java软件: 从网上下载jdk-7u25-windows-i586.exe,安装到C:\Program Files\Java\jdk1.7.0_25. 二 ...

  4. 用JAVA写一个画图小程序(JAVA 大作业)

    第一次写博客 且是稍微大点的程序 看看就行 重新写的在这,更加清晰明了:点击进入:用JAVA写一个画图小程序(JAVA 大作业)重排版本 设计思路 首先我直接去了Windows自带画图程序去实践模拟, ...

  5. 使用Java制作一个简易的远控终端

    使用Java制作一个简易的远控终端 远控终端的本质 1.服务端(攻击者)传输消息 ----> socket连接 ----> 客户端(被攻击者)接收消息 2.客户端执行消息内容(即执行服务端 ...

  6. MFC制作Windows画图程序(二)

    继<MFC制作Windows画图程序(一)> 文章目录 7 颜色填充功能 8 选择画笔颜色 9 设置画笔粗细 10 将绘制出来的图形保存的实现 11 添加位图 7 颜色填充功能 油漆桶功能 ...

  7. 运用Java制作一个属于自己的音乐播放软件

    运用Java制作一个属于自己的音乐播放软件 前言 上个寒假小编用python做了一个音乐播放软件(博客链接为:)运用tkinter.爬虫做了一个播放音乐的小程序(动态显示歌词[歌词向上翻滚]),觉得效 ...

  8. 怎样自己制作一个小程序?新手必知流程!

    随着市场需求的变化.不断成长的微信平台.随着周边小程序等功能的发布,商店公司开发小程序已经成为一种趋势.但是对于怎样自己制作一个小程序,很多卖家公司还是"新手",不明白应该使用什么 ...

  9. 如何用JAVA制作一个漂亮的表格

    如何用JAVA制作一个漂亮的表格 表格图片: 选中一行时高亮显示,且字体变为红色: 在表格中添加数据: 代码如下: import java.awt.BorderLayout; import java. ...

最新文章

  1. 升级gcc后glibc报错
  2. JenKins使用pm2部署.net core网站
  3. java的mvc实训报告_javaweb实验报告——MVC.docx
  4. 计算机主机部件与外设的工作原理,计算机组成原理名词解释和简答
  5. KlayGE 4.4中渲染的改进(三):高质量无限地形
  6. [CF1073E]Segment Sum
  7. 二叉树插入算法的非递归版本
  8. 完整的vue-cli3项目创建过程以及各种配置
  9. 【python】编码
  10. java 文件转换成二进制_java实现文件转换成二进制存储与取出
  11. 简述x264几种码率控制方式的实现
  12. delphi技巧--分离汉字和英文字母
  13. 微信小程序超链接跳转页面
  14. 操作系统-处理机调度(调度层次、基本准则、先来先服务、最短作业优先、高响应比、时间片轮转、优先级调度、多级反馈队列)
  15. Cesium加载各种互联网地图(一)
  16. python 学习笔记1
  17. php断言什么意思,一起学习PHP中断言函数的使用
  18. 人工智能课程期末总结
  19. JS模块化说明视频-张晓飞-专题视频课程
  20. 【动手学深度学习】之 现代卷积神经网络 AlexNet VGGNet NIN 习题解答

热门文章

  1. Node.js 异常处理
  2. 扩招那么多次,硕士真的越来越尴尬了
  3. E6终极备忘:修复IE6下_25+_Bugs
  4. 嵌入式实时操作系统的设计与开发New(三)
  5. 什么是模板缓冲(Stencil Buffer)
  6. 香港电讯成为Palo Alto Networks领先的中港网络安全托管服务提供商 共同推出Managed Secure Access Service Edge服务
  7. restrict 使用
  8. 中专技校计算机等级考试时间,中职学业水平考试时间表出炉!
  9. python3生成二维码实例fromm_Python morphology.binary_dilation方法代碼示例
  10. 一个iOS 开发应该掌握的技能