天天看點

用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

<code>package</code> <code>project;</code>

<code>import</code> <code>java.awt.Canvas;</code>

<code>import</code> <code>java.awt.Color;</code>

<code>import</code> <code>java.awt.Dimension;</code>

<code>import</code> <code>java.awt.Frame;</code>

<code>import</code> <code>java.awt.Graphics;</code>

<code>import</code> <code>java.awt.MenuItem;</code>

<code>import</code> <code>java.awt.PopupMenu;</code>

<code>import</code> <code>java.awt.event.ActionEvent;</code>

<code>import</code> <code>java.awt.event.ActionListener;</code>

<code>import</code> <code>java.awt.event.MouseAdapter;</code>

<code>import</code> <code>java.awt.event.MouseEvent;</code>

<code>import</code> <code>java.awt.event.MouseMotionAdapter;</code>

<code>import</code> <code>java.awt.event.WindowAdapter;</code>

<code>import</code> <code>java.awt.event.WindowEvent;</code>

<code>import</code> <code>java.awt.image.BufferedImage;</code>

<code>/**</code>

<code> </code><code>*</code>

<code> </code><code>*@author huyongjian Oracle(Compus Solution Group)</code>

<code> </code><code>* @Date  2013-8-18</code>

<code> </code><code>* @version 2.0</code>

<code> </code><code>* @since JDK1.6(建議)</code>

<code>   </code><code>Copy Right Information    COMPUS SOLUTION GROUP</code>

<code>   </code><code>IDE:Eclipse</code>

<code>   </code><code>class:</code>

<code>   </code><code>繪制圖像01</code>

<code> </code><code>*/</code>

<code>public</code> <code>class</code> <code>HandDraw {</code>

<code>    </code><code>//畫圖去的寬度</code>

<code>    </code><code>private</code> <code>final</code> <code>int</code> <code>AREA_WIDTH=</code><code>500</code><code>;</code>

<code>    </code><code>//畫圖去的高度</code>

<code>    </code><code>private</code> <code>final</code> <code>int</code> <code>AREA_HEIGHT=</code><code>400</code><code>;</code>

<code>    </code><code>//下面的prex、prey儲存了上一次滑鼠拖動事件的滑鼠坐标</code>

<code>    </code><code>private</code> <code>int</code> <code>preX=-</code><code>1</code><code>;</code>

<code>    </code><code>private</code> <code>int</code> <code>preY=-</code><code>1</code><code>;</code>

<code>    </code><code>//定義一個右鍵菜單用于設定畫筆顔色</code>

<code>    </code><code>PopupMenu pop=</code><code>new</code> <code>PopupMenu();</code>

<code>    </code><code>MenuItem redItem=</code><code>new</code> <code>MenuItem(</code><code>"紅色"</code><code>);</code>

<code>    </code><code>MenuItem greenItem=</code><code>new</code> <code>MenuItem(</code><code>"綠色"</code><code>);</code>

<code>    </code><code>MenuItem blueItem=</code><code>new</code> <code>MenuItem(</code><code>"藍色"</code><code>);</code>

<code>    </code><code>MenuItem blackItem=</code><code>new</code> <code>MenuItem(</code><code>"黑色"</code><code>);</code>

<code>    </code><code>//定義一個BufferedImage對象</code>

<code>    </code><code>BufferedImage image=</code><code>new</code> <code>BufferedImage(AREA_WIDTH,AREA_HEIGHT,</code>

<code>            </code><code>BufferedImage.TYPE_INT_RGB</code>

<code>            </code><code>);</code>

<code>    </code><code>//擷取image對象的Graphics</code>

<code>    </code><code>Graphics g=image.getGraphics();</code>

<code>    </code><code>private</code> <code>Frame f=</code><code>new</code> <code>Frame(</code><code>"簡單手繪程式"</code><code>);</code>

<code>    </code><code>private</code> <code>DrawCanvas drawArea=</code><code>new</code> <code>DrawCanvas();</code>

<code>    </code><code>//用于儲存需要繪制什麼圖形的字元串屬性</code>

<code>    </code><code>private</code> <code>String shape=</code><code>""</code><code>;</code>

<code>    </code><code>//用于儲存畫筆顔色</code>

<code>    </code><code>private</code> <code>Color foreColor=</code><code>new</code> <code>Color(</code><code>255</code><code>,</code><code>0</code><code>,</code><code>0</code><code>);</code>

<code>    </code><code>public</code> <code>void</code> <code>init(){</code>

<code>        </code><code>ActionListener menuListener=</code><code>new</code> <code>ActionListener(){</code>

<code>            </code><code>public</code> <code>void</code> <code>actionPerformed(ActionEvent e){</code>

<code>                </code><code>if</code><code>(e.getActionCommand().equals(</code><code>"綠色"</code><code>)){</code>

<code>                    </code><code>foreColor=</code><code>new</code> <code>Color(</code><code>0</code><code>,</code><code>255</code><code>,</code><code>0</code><code>);</code>

<code>                </code><code>}</code>

<code>                </code><code>if</code><code>(e.getActionCommand().equals(</code><code>"紅色"</code><code>)){</code>

<code>                    </code><code>foreColor=</code><code>new</code> <code>Color(</code><code>255</code><code>,</code><code>0</code><code>,</code><code>0</code><code>);</code>

<code>                </code><code>if</code><code>(e.getActionCommand().equals(</code><code>"藍色"</code><code>)){</code>

<code>                    </code><code>foreColor=</code><code>new</code> <code>Color(</code><code>0</code><code>,</code><code>0</code><code>,</code><code>255</code><code>);</code>

<code>                </code><code>if</code><code>(e.getActionCommand().equals(</code><code>"黑色"</code><code>)){</code>

<code>                    </code><code>foreColor=</code><code>new</code> <code>Color(</code><code>0</code><code>,</code><code>0</code><code>,</code><code>0</code><code>);</code>

<code>            </code><code>}</code>

<code>        </code><code>};</code>

<code>        </code><code>//為三個菜單添加事件監聽器</code>

<code>        </code><code>redItem.addActionListener(menuListener);</code>

<code>        </code><code>greenItem.addActionListener(menuListener);</code>

<code>        </code><code>blueItem.addActionListener(menuListener);</code>

<code>        </code><code>blackItem.addActionListener(menuListener);</code>

<code>        </code><code>//将菜單項組合成右鍵菜單</code>

<code>        </code><code>pop.add(redItem);</code>

<code>        </code><code>pop.add(greenItem);</code>

<code>        </code><code>pop.add(blueItem);</code>

<code>        </code><code>pop.add(blackItem);</code>

<code>        </code><code>//将右鍵菜單添加到drawArea對象中</code>

<code>        </code><code>drawArea.add(pop);</code>

<code>        </code><code>//将image對象的背景色填充成白色</code>

<code>        </code><code>g.fillRect(</code><code>0</code><code>, </code><code>0</code><code>, AREA_WIDTH, AREA_HEIGHT);</code>

<code>        </code><code>drawArea.setPreferredSize(</code><code>new</code> <code>Dimension(AREA_WIDTH,AREA_HEIGHT));</code>

<code>        </code><code>//監聽滑鼠移動動作</code>

<code>        </code><code>drawArea.addMouseMotionListener(</code><code>new</code> <code>MouseMotionAdapter(){</code>

<code>            </code><code>//實作按下滑鼠鍵并拖動的事件處理器</code>

<code>            </code><code>public</code> <code>void</code> <code>mouseDragged(MouseEvent e) {</code>

<code>                </code><code>//如果preX和preY大于0</code>

<code>                </code><code>if</code><code>(preX&gt;</code><code>0</code><code>&amp;&amp;preY&gt;</code><code>0</code><code>){</code>

<code>                    </code><code>//設定目前顔色</code>

<code>                    </code><code>g.setColor(foreColor);</code>

<code>                    </code><code>//繪制從上一次滑鼠拖動事件點到本次滑鼠拖動事件點的線段</code>

<code>                    </code><code>g.drawLine(preX, preY, e.getX(), e.getY());</code>

<code>                </code><code>//将目前滑鼠事件點的x、y坐标儲存起來</code>

<code>                </code><code>preX=e.getX();</code>

<code>                </code><code>preY=e.getY();</code>

<code>                </code><code>//重繪drawArea對象</code>

<code>                </code><code>drawArea.repaint();</code>

<code>        </code><code>});</code>

<code>        </code><code>drawArea.addMouseListener(</code><code>new</code> <code>MouseAdapter(){</code>

<code>            </code><code>public</code> <code>void</code> <code>mouseReleased(MouseEvent e) {</code>

<code>                </code><code>//彈出右鍵菜單</code>

<code>                </code><code>if</code><code>(e.isPopupTrigger()){</code>

<code>                    </code><code>pop.show(drawArea, e.getX(), e.getY());</code>

<code>                </code><code>//松開滑鼠鍵,把上一次滑鼠拖動事件的 x y坐标設為-1;</code>

<code>                </code><code>preX=-</code><code>1</code><code>;</code>

<code>                </code><code>preY=-</code><code>1</code><code>;</code>

<code>        </code><code>f.add(drawArea);</code>

<code>        </code><code>f.pack();</code>

<code>        </code><code>f.setVisible(</code><code>true</code><code>);</code>

<code>        </code><code>f.addWindowListener(</code><code>new</code> <code>WindowAdapter(){</code>

<code>            </code><code>public</code> <code>void</code> <code>windowClosing(WindowEvent e){</code>

<code>                </code><code>System.exit(</code><code>0</code><code>);</code>

<code>        </code><code>f.setLocationRelativeTo(</code><code>null</code><code>);</code>

<code>    </code><code>}</code>

<code>                      </code> 

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>main(String[] args) {</code>

<code>        </code><code>new</code> <code>HandDraw().init();</code>

<code>    </code><code>class</code> <code>DrawCanvas </code><code>extends</code> <code>Canvas{</code>

<code>        </code><code>public</code> <code>void</code> <code>paint(Graphics g) {</code>

<code>         </code><code>g.drawImage(image, </code><code>0</code><code>, </code><code>0</code><code>, </code><code>null</code><code>);</code>

<code>        </code><code>}</code>

<code>}</code>

本文轉自 小夜的傳說 51CTO部落格,原文連結:http://blog.51cto.com/1936625305/1282131,如需轉載請自行聯系原作者