用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,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
Java
java程序导出堆文件
java程序导出堆文件
|
1月前
|
SQL Oracle Java
sql文件批处理程序-java桌面应用
sql文件批处理程序-java桌面应用
25 0
|
1月前
|
存储 Java
Java:编写程序,计算两个数的和、差、积、商和余数。docx
Java:编写程序,计算两个数的和、差、积、商和余数。docx
|
1月前
|
安全 Java 数据库连接
【Java每日一题】——第四十一题:编写程序描述影视歌三栖艺人。
【Java每日一题】——第四十一题:编写程序描述影视歌三栖艺人。
31 0
|
1月前
|
Java 程序员 编译器
【详识JAVA语言】面向对象程序三大特性之二:继承
【详识JAVA语言】面向对象程序三大特性之二:继承
47 2
|
12天前
|
Java Maven
【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“
【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“
33 3
|
27天前
|
Java
elasticsearch使用java程序添加删除修改
elasticsearch使用java程序添加删除修改
9 0
|
1月前
|
Java
java程序
re是java运行时的环境,包含jvm和运行时所需要的类库 jdk是java开的程序包,包含jre和开发人员使用的工具 jvm就是我们常说的java虚拟机,他是整个java实现跨平台的最核心 的部分,所有的java程序会首先被编译为.class的类文件,这种类文 件可以在虚拟机上执行。也就是说class并不直接与机器的操作系统 相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释 给本地系统执行。 只有jvm还不能成class的执行,因为再解释class的时候jvm需要调用 解释所需要的类库lib,而jre包含lib类库。jvm屏蔽了与具体操作系 统平台相关的信息,使得java程
17 0
|
1月前
|
存储 Java Shell
Java程序结构
Java程序结构
12 3
|
1月前
|
安全 Java 数据库连接
【Java每日一题】——第四十二题:编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶。
【Java每日一题】——第四十二题:编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶。
68 0