用Java编写的简单手绘程序--原创

简介:

1、Java版本简单的手绘程序,点击右键可以选择颜色,对初学Java的同学还是很有帮助!学会做这个,下一步就可以做出一个简单的Windows版本的画图!


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package  project;
import  java.awt.Canvas;
import  java.awt.Color;
import  java.awt.Dimension;
import  java.awt.Frame;
import  java.awt.Graphics;
import  java.awt.MenuItem;
import  java.awt.PopupMenu;
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.WindowAdapter;
import  java.awt.event.WindowEvent;
import  java.awt.image.BufferedImage;
/**
  *
  *@author huyongjian Oracle(Compus Solution Group)
  * @Date  2013-8-18
  * @version 2.0
  * @since JDK1.6(建议)
    Copy Right Information    COMPUS SOLUTION GROUP
    IDE:Eclipse
    class:
    绘制图像01
  */
public  class  HandDraw {
     //画图去的宽度
     private  final  int  AREA_WIDTH= 500 ;
     //画图去的高度
     private  final  int  AREA_HEIGHT= 400 ;
     //下面的prex、prey保存了上一次鼠标拖动事件的鼠标坐标
     private  int  preX=- 1 ;
     private  int  preY=- 1 ;
     //定义一个右键菜单用于设置画笔颜色
     PopupMenu pop= new  PopupMenu();
     MenuItem redItem= new  MenuItem( "红色" );
     MenuItem greenItem= new  MenuItem( "绿色" );
     MenuItem blueItem= new  MenuItem( "蓝色" );
     MenuItem blackItem= new  MenuItem( "黑色" );
     //定义一个BufferedImage对象
     BufferedImage image= new  BufferedImage(AREA_WIDTH,AREA_HEIGHT,
             BufferedImage.TYPE_INT_RGB
             );
     //获取image对象的Graphics
     Graphics g=image.getGraphics();
     private  Frame f= new  Frame( "简单手绘程序" );
     private  DrawCanvas drawArea= new  DrawCanvas();
     //用于保存需要绘制什么图形的字符串属性
     private  String shape= "" ;
     //用于保存画笔颜色
     private  Color foreColor= new  Color( 255 , 0 , 0 );
     public  void  init(){
         ActionListener menuListener= new  ActionListener(){
             public  void  actionPerformed(ActionEvent e){
                 if (e.getActionCommand().equals( "绿色" )){
                     foreColor= new  Color( 0 , 255 , 0 );
                 }
                 if (e.getActionCommand().equals( "红色" )){
                     foreColor= new  Color( 255 , 0 , 0 );
                 }
                 if (e.getActionCommand().equals( "蓝色" )){
                     foreColor= new  Color( 0 , 0 , 255 );
                 }
                 if (e.getActionCommand().equals( "黑色" )){
                     foreColor= new  Color( 0 , 0 , 0 );
                 }
             }
         };
         //为三个菜单添加事件监听器
         redItem.addActionListener(menuListener);
         greenItem.addActionListener(menuListener);
         blueItem.addActionListener(menuListener);
         blackItem.addActionListener(menuListener);
         //将菜单项组合成右键菜单
         pop.add(redItem);
         pop.add(greenItem);
         pop.add(blueItem);
         pop.add(blackItem);
         //将右键菜单添加到drawArea对象中
         drawArea.add(pop);
         //将image对象的背景色填充成白色
         g.fillRect( 0 0 , AREA_WIDTH, AREA_HEIGHT);
         drawArea.setPreferredSize( new  Dimension(AREA_WIDTH,AREA_HEIGHT));
         //监听鼠标移动动作
         drawArea.addMouseMotionListener( new  MouseMotionAdapter(){
             //实现按下鼠标键并拖动的事件处理器
             public  void  mouseDragged(MouseEvent e) {
                 //如果preX和preY大于0
                 if (preX> 0 &&preY> 0 ){
                     //设置当前颜色
                     g.setColor(foreColor);
                     //绘制从上一次鼠标拖动事件点到本次鼠标拖动事件点的线段
                     g.drawLine(preX, preY, e.getX(), e.getY());
                 }
                 //将当前鼠标事件点的x、y坐标保存起来
                 preX=e.getX();
                 preY=e.getY();
                 //重绘drawArea对象
                 drawArea.repaint();
             }
         });
         drawArea.addMouseListener( new  MouseAdapter(){
             public  void  mouseReleased(MouseEvent e) {
                 //弹出右键菜单
                 if (e.isPopupTrigger()){
                     pop.show(drawArea, e.getX(), e.getY());
                 }
                 //松开鼠标键,把上一次鼠标拖动事件的 x y坐标设为-1;
                 preX=- 1 ;
                 preY=- 1 ;
             }
         });
         f.add(drawArea);
         f.pack();
         f.setVisible( true );
         f.addWindowListener( new  WindowAdapter(){
             public  void  windowClosing(WindowEvent e){
                 System.exit( 0 );
             }
         });
         f.setLocationRelativeTo( null );
     }
                       
     public  static  void  main(String[] args) {
         new  HandDraw().init();
     }
     class  DrawCanvas  extends  Canvas{
         public  void  paint(Graphics g) {
          g.drawImage(image,  0 0 null );
         }
     }
}









本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1282131,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
Java 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
利用java8 的 CompletableFuture 优化 Flink 程序
|
4月前
|
XML 存储 JSON
Java程序部署
Java程序部署
|
2月前
|
SQL 安全 Java
Java 异常处理:筑牢程序稳定性的 “安全网”
本文深入探讨Java异常处理,涵盖异常的基础分类、处理机制及最佳实践。从`Error`与`Exception`的区分,到`try-catch-finally`和`throws`的运用,再到自定义异常的设计,全面解析如何有效管理程序中的异常情况,提升代码的健壮性和可维护性。通过实例代码,帮助开发者掌握异常处理技巧,确保程序稳定运行。
56 1
|
2月前
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
100 1
|
3月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
552 2
|
3月前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
186 1
|
3月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
104 1
|
4月前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
57 5
|
4月前
|
Java 编译器 数据库连接
探索Java中的异常处理:提升程序的鲁棒性
【9月更文挑战第25天】在Java的世界里,异常是那些不请自来、令人头疼的“客人”。它们悄无声息地潜入我们的代码,一旦出现,便可能导致程序崩溃或行为异常。但是,如果能够妥善管理这些异常,我们就能将潜在的灾难转变为增强程序鲁棒性和用户体验的机会。本文将通过深入浅出的方式,带领读者理解Java异常处理的重要性,并提供实用的策略来优雅地处理这些意外情况。让我们一起学习如何在Java中捕捉、处理和预防异常,确保我们的程序即使在面对不可预见的错误时也能保持稳健运行。
|
3月前
|
Java Python
如何通过Java程序调用python脚本
如何通过Java程序调用python脚本
51 0