用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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值