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,如需转载请自行联系原作者