一個利用GUI方法實現(xiàn)簡單繪圖功能的應(yīng)用程序_第1頁
一個利用GUI方法實現(xiàn)簡單繪圖功能的應(yīng)用程序_第2頁
一個利用GUI方法實現(xiàn)簡單繪圖功能的應(yīng)用程序_第3頁
一個利用GUI方法實現(xiàn)簡單繪圖功能的應(yīng)用程序_第4頁
一個利用GUI方法實現(xiàn)簡單繪圖功能的應(yīng)用程序_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、目 錄1. 程序設(shè)計內(nèi)容概論11.1程序設(shè)計的目的11.2程序設(shè)計的任務(wù)12 設(shè)計思想12.1需求分析12.2總體設(shè)計12.2.1面板布局 12.2.2實現(xiàn)繪畫圖形22.2.3填充功能22.2.4畫筆的粗細(xì)及畫筆的顏色變更22.2.5實現(xiàn)鼠標(biāo)單擊和鼠標(biāo)拖拽進(jìn)行繪圖22.3編程環(huán)境32.4.工具說明33 系統(tǒng)流程44 設(shè)計uml類圖55 設(shè)計層次結(jié)構(gòu)樹66 運行結(jié)果與分析77 設(shè)計總結(jié)128.參考文獻(xiàn)139.附錄141 程序設(shè)計內(nèi)容概論1.1程序設(shè)計的目的 本程序是一個利用gui方法實現(xiàn)簡單繪圖功能的應(yīng)用程序。1.2程序設(shè)計的任務(wù)程序主要創(chuàng)建了5個jradiobutton, 1個jcheckbo

2、x,2個jbutton以及一個jslider用于選擇繪畫功能操作。接著創(chuàng)建三個面板用于設(shè)計繪圖的整體畫板,并利用按鈕監(jiān)聽器,滑動條和鼠標(biāo)操作實現(xiàn)在面板上繪圖的簡單功能。在程序中,利用創(chuàng)建jradiobutton實現(xiàn)多選一繪畫功能,創(chuàng)建jcheckbox實現(xiàn)填充功能,而2個jbutton則分別實現(xiàn)顏色更變和清除畫板。同時本程序使用了鼠標(biāo)點擊,鼠標(biāo)釋放和鼠標(biāo)拖拽來進(jìn)行畫板繪畫,利用鼠標(biāo)點擊實現(xiàn)初點坐標(biāo)獲取,在繪畫曲線時,主要通過鼠標(biāo)拖拽實現(xiàn)在畫板上不斷繪制(不斷進(jìn)行末點坐標(biāo)賦值初點);在繪畫直線時,主要通過鼠標(biāo)拖拽達(dá)到動態(tài)效果,并通過鼠標(biāo)釋放最終描繪出直線;在繪畫矩形和圓時,主要通過鼠標(biāo)拖拽達(dá)到動

3、態(tài)效果,并通過鼠標(biāo)釋放最終描繪出矩形和圓;在繪畫粗線時,主要通過不斷重畫實心圓來實現(xiàn)。 2 設(shè)計思想2.1需求分析2.1.1面板布局2.1.2實現(xiàn)繪畫圖形(曲線,直線,圓,橢圓,矩形)3.1.3填充功能(其中包括圓的填充,橢圓圓的填充,矩形圓的填充)3.1.4畫筆的粗細(xì)及畫筆的顏色變更3.1.5實現(xiàn)鼠標(biāo)單擊和鼠標(biāo)拖拽進(jìn)行繪圖2.2總體設(shè)計2.2.1面板布局主要創(chuàng)建5個jradiobutton, 1個jcheckbox,2個jbutton以及一個jslider,同時創(chuàng)建三個面板(一個面板用于繪圖,一個面板用于把所有按鈕及滑動條等添加進(jìn)去,一個面板用于把已經(jīng)添加了按鈕和滑動條的面板添加進(jìn)去,用于區(qū)

4、分繪圖面板和按鈕面板的位置),利用盒式布局管理器將所有的組件(包括5個jradiobutton, 1個jcheckbox,2個jbutton以及一個jslider)進(jìn)行布局,再利用邊界布局管理器對面板進(jìn)行位置編排,繪圖面板在中間,另一個在西邊。最終完成了畫板的布局。2.2.2實現(xiàn)繪畫圖形(曲線,直線,圓,橢圓,矩形)在實現(xiàn)繪畫的功能,主要通過創(chuàng)建buttongroup從而把所有的jradiobutton都添加進(jìn)去,從而達(dá)到在描繪圖形時多選一的選擇功能;利用按鈕監(jiān)聽器,利用object source=event.getsource()語句當(dāng)source=op1時進(jìn)行曲線繪畫,在實現(xiàn)曲線繪畫的功能

5、時,主要利用了鼠標(biāo)的點擊和鼠標(biāo)的拖拽,通過鼠標(biāo)的點擊來撲捉第一個坐標(biāo)點,然后利用鼠標(biāo)的拖拽來不斷變換第一個點的坐標(biāo)(利用sx=x和sy=y語句),從而將所有點都連接起來,最終實現(xiàn)了在畫板上描繪曲線的功能;當(dāng)source=op2時進(jìn)行直線繪畫,在實現(xiàn)直線繪畫的功能時,主要利用了鼠標(biāo)的點擊,鼠標(biāo)的釋放和鼠標(biāo)的拖拽,通過鼠標(biāo)的點擊來撲捉直線的第一個坐標(biāo)點,然后利用鼠標(biāo)的拖拽選擇直線的另一個點,最終通過鼠標(biāo)的釋放在畫板上描繪出直線來;當(dāng)source=op3時進(jìn)行圓和橢圓繪畫,在實現(xiàn)圓和橢圓繪畫的功能時,主要利用了鼠標(biāo)的點擊,鼠標(biāo)的釋放和鼠標(biāo)的拖拽,通過鼠標(biāo)的點擊來撲捉圓和橢圓的一個坐標(biāo)點,然后利用鼠標(biāo)

6、的拖拽選擇圓和橢圓的大小,最終通過鼠標(biāo)的釋放在畫板上描繪出圓和橢圓來;當(dāng)source=op4時進(jìn)行矩形繪畫,在實現(xiàn)矩形繪畫的功能時,主要利用了鼠標(biāo)的點擊,鼠標(biāo)的釋放和鼠標(biāo)的拖拽,通過鼠標(biāo)的點擊來撲捉矩形的一個坐標(biāo)點,然后利用鼠標(biāo)的拖拽選擇矩形的大小,最終通過鼠標(biāo)的釋放在畫板上描繪出矩形來。2.2.3填充功能(其中包括圓的填充,橢圓圓的填充,矩形圓的填充)通過jcheckbox創(chuàng)建一個按鈕,利用按鈕監(jiān)聽器決定是否要描繪填充圖形,如果是則將實現(xiàn)賦值fill=true,否則fill=false,然后通過布爾值判斷在描繪圖形時是draw還是fill,如果布爾值是ture時則實現(xiàn)了圖形的填充。2.2.4

7、畫筆的粗細(xì)及畫筆的顏色變更畫筆的粗細(xì)主要是通過不斷地重畫填充圓來實現(xiàn),通過鼠標(biāo)的拖拽不斷地在畫板上進(jìn)行重畫;而粗細(xì)則由創(chuàng)建的jslider來調(diào)節(jié)圓的半徑, 如果圓的半徑越大則所繪出的曲線越粗,反則越細(xì);畫筆的顏色變更主要通過創(chuàng)建的jbutton按鈕,利用按鈕監(jiān)聽器,當(dāng)按下了按鈕,則實現(xiàn)c=jcolorchooser.showdialog(right,choose,c)語句,從而把初始的畫筆顏色(黑色)改變。2.2.5實現(xiàn)鼠標(biāo)單擊和鼠標(biāo)拖拽進(jìn)行繪圖 通過語句right.addmouselistener和語句addmousemotionlistener(new listen1()來設(shè)計在right

8、面板上進(jìn)行鼠標(biāo)單擊和鼠標(biāo)拖拽等繪圖,通過鼠標(biāo)的單擊(mousepressed)獲取圖形的第一個點,再利用鼠標(biāo)的拖拽(mousedragged)選擇圖形的形狀,大小和方向等。2.3編程環(huán)境 本次編程的環(huán)境為jdk。2.4.工具說明 本次編程工具為ultraedit。3 系統(tǒng)流程開始填充畫筆粗細(xì)清除顏色粗線按鈕矩形按鈕畫圓按鈕直線按鈕曲線按鈕f=2f=3f=4f=5f=1填充 y nsize 改變fill=falsefill=true改變顏色輸入顏色 y n f=5f=4f=3f=2f=1畫出粗線畫出矩形畫出圓畫出直線畫出曲線結(jié)束畫板 4 設(shè)計uml類圖 drawpanelf:intsx:ints

9、y:intx:inty:intfill:booleanflag:booleanmousepressed():voidmousereleased():voidmousedragged():voidmouseentered():voidmouseexited():voidmouseclicked():voidmousemoved():voidactionperforned():voidstatechanged():voiddraw1main(args:string):void 繪圖程序uml類圖5 設(shè)計層次結(jié)構(gòu)樹jframejpanel(border layout)jpanelcenter-rig

10、htjpanelwest-left(vertial box layout)jradiobuttonjradiobuttonjradiobuttonjradiobuttonjradiobuttonjcheckboxjbuttonjbuttonjsliderjlabel6 運行結(jié)果與分析6.1 整體畫板展示畫板分析:利用盒式布局管理器將所有的組件(包括5個jradiobutton, 1個jcheckbox,2個jbutton以及一個jslider)進(jìn)行布局,再利用邊界布局管理器對面板進(jìn)行位置編排,繪圖面板在中間(center),另一個在西邊(west)。6.2用曲線、直線、圓、矩形畫黑白小屋子6.

11、3用粗線寫祝福語6.4用填充效果畫圖6.5.用帶有顏色的畫筆畫圖7 設(shè)計總結(jié)在本次java課程設(shè)計中,我設(shè)計了一個繪圖應(yīng)用程序。該繪圖應(yīng)用程序?qū)崿F(xiàn)了畫曲線,直線,畫圓,畫矩形和粗線功能,同時可以實現(xiàn)圖形的填充和顏色的變換,另外還設(shè)計了一個清除畫板按鍵,可以應(yīng)用于平時一些簡單的畫圖操作。在本繪圖應(yīng)用程序中,所存在的問題是圖形的種類不夠完善,未能實現(xiàn)畫弧,畫多邊形等功能,另外一個不足的地方時整個畫板只能畫一種顏色的圖形,未能滿足更高要求的繪畫需要。在本次java課程設(shè)計中,我收獲了很多。特別是在編寫java程序時,必須先對程序的功能進(jìn)行初步的分析,得到程序中每一個功能所需要用到的方法或思路,同時根

12、據(jù)功能的相似來設(shè)計一類功能的實現(xiàn),并通過某些語句的改變達(dá)到多功能效果,例如在本次設(shè)計中,分析可得圓和矩形有很大的相似度,利用drawoval和drawrect的變換可以達(dá)到繪畫的效果。在設(shè)計圖形的填充時,我參考了本學(xué)期所學(xué)的jcheckbox方法和判斷語句,有效地處理了圖形的填充問題,并系統(tǒng)地學(xué)習(xí)了鼠標(biāo)拖拽的應(yīng)用。在本次設(shè)計中,最難處理的問題是用鼠標(biāo)拖拽來畫直線,圓和矩形,因為在使用鼠標(biāo)拖拽時,會出現(xiàn)在畫板上不斷重畫的效果,無法達(dá)到自己想要的效果,后來在同學(xué)的幫助和參考部分java教科書下,成功了解決了這個問題,而在解決這個問題,使我認(rèn)識到學(xué)習(xí)不能只局限于課本,必要時應(yīng)該要多閱讀一些相關(guān)的ja

13、va書籍,從而讓自己的知識面更加廣,處理問題更加有效率。所以,經(jīng)過本次編寫繪圖應(yīng)用程序,使我把本學(xué)期所學(xué)的java知識充分地運用到課程設(shè)計中來,既提高了自己學(xué)習(xí)的主動性,同時為自己以后的學(xué)習(xí)打下了更深的基礎(chǔ)。參考文獻(xiàn)1 john lewis、willian loftus,java程序設(shè)計教程,北京:電子工業(yè)出版社,2009;2 楊樹林、胡潔萍,java語言最新實用案例教程,北京:清華大學(xué)出版社,2006;3 譚浩強,c程序設(shè)計,北京:清華大學(xué)出版社,2008。附錄:import javax.swing.jframe;public class draw1 public static void m

14、ain (string args) jframe frame = new jframe (draw); frame.setdefaultcloseoperation (jframe.exit_on_close); drawpanel draw =new drawpanel(); frame.getcontentpane().add (draw); frame.pack(); frame.setvisible(true); import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event

15、.*;import java.util.*;import javax.swing.colorchooser.*;public class drawpanel extends jpanel private jpanel p1,right,left; private jradiobutton op1,op2,op3,op4,op5; private jcheckbox c1; private jbutton a,b; private int f=1; private int sx, sy, x,y; private boolean fill=false; private boolean flag=

16、false; private color c; private point point1=null,point2=null; private jslider slider; private jlabel label1; private int size=10; public drawpanel() c =color.black; right = new jpanel(); left = new jpanel(); p1 = new jpanel(); buttongroup g = new buttongroup(); op1 = new jradiobutton(曲線,true); op2

17、= new jradiobutton(直線,false); op3 = new jradiobutton(畫圓,false); op4 = new jradiobutton(矩形,false); op5 = new jradiobutton(粗線,false); g.add(op1); g.add(op2); g.add(op3); g.add(op4); g.add(op5); c1 = new jcheckbox(填充); a=new jbutton(顏色); b=new jbutton(清除); slider =new jslider(jslider.vertical,0,25,10);

18、 slider.setmajortickspacing(5); slider.setminortickspacing(1); slider.setpaintticks(true); slider.setpaintlabels(true); slider.setalignmentx(component.left_alignment); label1 =new jlabel(size:10); label1.setalignmentx(component.left_alignment); p1.setlayout(new boxlayout(p1,boxlayout.y_axis); p1.add

19、(op1); p1.add(op2); p1.add(op3); p1.add(op4); p1.add(op5); p1.add(c1); c1.addactionlistener(new listen3(); p1.add(a); p1.add(box.createrigidarea(new dimension(0,10); p1.add(b); a.addactionlistener(new listen4(); b.addactionlistener(new listen5(); p1.add(slider); slider.addchangelistener(new listen6(

20、); p1.add(label1); left.add(p1); right.setbackground(color.white); op1.addactionlistener(new listen2(); op2.addactionlistener(new listen2(); op3.addactionlistener(new listen2(); op4.addactionlistener(new listen2(); op5.addactionlistener(new listen2(); right.addmouselistener(new listen1(); right.addm

21、ousemotionlistener(new listen1(); setlayout(new borderlayout(); add(right,center); add(left,west); setbackground(color.white); setpreferredsize(new dimension(500,450); private class listen1 implements mouselistener,mousemotionlistener public void mousepressed(mouseevent event) flag=false; point1=eve

22、nt.getpoint(); sx=point1.x; sy=point1.y ; public void mousereleased(mouseevent event) int x0,y0; graphics g=right.getgraphics(); switch(f) case 2: point2=event.getpoint(); x=point2.x; y=point2.y ; g.setcolor(c); g.drawline(sx,sy,x,y); break; case 3: point2=event.getpoint(); x=point2.x; y=point2.y ;

23、x0=xsx?sx:x; y0=ysy?sy:y; g.setcolor(c); if(! fill) g.drawoval(x0,y0,math.abs(x-sx),math.abs(y-sy); else g.filloval(x0,y0,math.abs(x-sx),math.abs(y-sy); break; case 4: point2=event.getpoint(); x=point2.x; y=point2.y ; x0=xsx?sx:x; y0=ysy?sy:y; g.setcolor(c); if(! fill) g.drawrect(x0,y0,math.abs(x-sx

24、),math.abs(y-sy); else g.fillrect(x0,y0,math.abs(x-sx),math.abs(y-sy); break; public void mouseentered(mouseevent event) public void mouseexited(mouseevent event) public void mouseclicked(mouseevent event) public void mousemoved(mouseevent event) public void mousedragged(mouseevent event) int x0,y0;

25、 graphics g=right.getgraphics(); switch(f). case 1: point2=event.getpoint(); x=point2.x; y=point2.y ; g.setcolor(c); g.drawline(sx,sy,x,y); sx=x; sy=y; break; case 2: if(! flag) point2=event.getpoint(); x=point2.x; y=point2.y ; g.drawline(sx,sy,x,y); flag=true; else g.setxormode(color.white); g.draw

26、line(sx,sy,x,y); point2=event.getpoint(); x=point2.x; y=point2.y ; g.drawline(sx,sy,x,y); break; case 3: if(! flag) point2=event.getpoint(); x=point2.x; y=point2.y ; x0=xsx?sx:x; y0=ysy?sy:y; if(! fill) g.drawoval(x0,y0,math.abs(x-sx),math.abs(y-sy); else g.filloval(x0,y0,math.abs(x-sx),math.abs(y-s

27、y); flag=true; else g.setxormode(color.white); x0=xsx?sx:x; y0=ysy?sy:y; if(! fill) g.drawoval(x0,y0,math.abs(x-sx),math.abs(y-sy); else g.filloval(x0,y0,math.abs(x-sx),math.abs(y-sy); point2=event.getpoint(); x=point2.x; y=point2.y ; x0=xsx?sx:x; y0=ysy?sy:y; if(! fill) g.drawoval(x0,y0,math.abs(x-

28、sx),math.abs(y-sy); else g.filloval(x0,y0,math.abs(x-sx),math.abs(y-sy); break; case 4: if(! flag) point2=event.getpoint(); x=point2.x; y=point2.y ; x0=xsx?sx:x; y0=ysy?sy:y; if(! fill) g.drawrect(x0,y0,math.abs(x-sx),math.abs(y-sy); else g.fillrect(x0,y0,math.abs(x-sx),math.abs(y-sy); flag=true; el

29、se g.setxormode(color.white); x0=xsx?sx:x; y0=ysy?sy:y; if(! fill) g.drawrect(x0,y0,math.abs(x-sx),math.abs(y-sy); else g.fillrect(x0,y0,math.abs(x-sx),math.abs(y-sy); point2=event.getpoint(); x=point2.x; y=point2.y ; x0=xsx?sx:x; y0=ysy?sy:y; if(! fill) g.drawrect(x0,y0,math.abs(x-sx),math.abs(y-sy); else g.f

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論