簡易畫圖板的升級版本1.2

自打上次做了畫圖板之後已經很久沒更新了,原因可能是因爲我老是覺得自己的java爛到爆,總想着以後再去解決。但是事情不該拖的。反正,今天總算是解決了。如釋重負吧。不過,這個鬼東西,閒着沒事的時候我還會繼續優化,繼續升級我的各種版本。

言歸正傳。先來給大家展示一下這貨~~


這次的畫圖板,我在上次做畫圖板的基礎上(詳情見上上上一篇博客)添加了以下功能:重繪鉛筆橡皮圓角矩形顏色面板。下面我簡單用語言描述一下我所遇到的重點問題,詳細請見代碼,下載地址請戳這裏:http://download.csdn.net/detail/miao933/5492989

1.先來說一下重繪功能,所謂的重繪,其實是重寫paint方法。由於每次對JPanel 進行點擊,更改大小等任何操作的時候,系統會自動調用paint方法,而原本的paint方法沒有內容,導致用戶所畫圖形會消失。爲了解決此問題而重寫該方法。

寫該方法的時候要注意三個問題:a. mouselistener 應該由panel_draw添加,防止座標偏移。(同理,畫布Graphics也要注意由panel_draw獲取)

                                                    b.在paint方法中要用super調用父類的方法,形如:super.paint(g),原因是因爲此方法實際上將繪製工作委託給三個受保護的方法: paintComponent  paintBorder和paintChildren.按列出的順序調用這些方法,以確保子組件出現在組件本身的頂部。所以如果不調父類該方法,那麼paint方法的重寫是沒有意義的,沒有真正達到重繪的目的。

                                                    c.自己定義一個MyList隊列,用來存放每一次繪製的shape,以便重繪時調用,將隊列中的內容重新繪製到面板上。


2.再來說說鉛筆功能。打開xp畫圖板,用鉛筆功能繪製一段線條,再拿放大鏡放大,便可以看出它是由一段一段的線段組成的。因此我們仍可以採用之前我上次博客中繪製直線 的方法,只需稍做修改,不停地偵聽並轉換座標即可。

3.橡皮功能,我是用fillRect 實現的,並在傳參之前將color 賦值爲白色。還有一點缺陷,就是當鼠標拖動速度過快的時候,變使得橡皮所擦內容出現間距。也許會在接下來的版本中進行改進。

4.圓角矩形,更簡單了,系統中就有該方法。不多說了,和上次實現的矩形類似。

5.最後說一下顏色面板的問題。和工具面板一樣,爲了減少冗餘代碼,定義了一個String類型的數組,然後在for 循環內進行設置按鈕,以及添加監聽,使得畫板富有生命

6.補充一條傳參的問題,傳參發生在兩個類之間建立的聯繫上,一般來說是一個形如X x = new X();在括號內進行傳參,當需傳很多數據,其值又是變量,只要把他定義成當前類的屬性,然後統一用this傳給對方即可解決。

7.再次補充,內部類。實現接口或抽象方法中的方法時可以利用內部類。


ps:這次做畫圖板最大的收穫呢,就是我一直以來望而卻步的java,其實沒有想象中的可怕,反而讓我有了興趣。也讓我學會了思考。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章