![一個利用GUI方法實現(xiàn)簡單繪圖功能的應用程序_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/21/7b8a8814-3b64-4ddb-84b7-04c853befc4a/7b8a8814-3b64-4ddb-84b7-04c853befc4a1.gif)
![一個利用GUI方法實現(xiàn)簡單繪圖功能的應用程序_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/21/7b8a8814-3b64-4ddb-84b7-04c853befc4a/7b8a8814-3b64-4ddb-84b7-04c853befc4a2.gif)
![一個利用GUI方法實現(xiàn)簡單繪圖功能的應用程序_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/21/7b8a8814-3b64-4ddb-84b7-04c853befc4a/7b8a8814-3b64-4ddb-84b7-04c853befc4a3.gif)
![一個利用GUI方法實現(xiàn)簡單繪圖功能的應用程序_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/21/7b8a8814-3b64-4ddb-84b7-04c853befc4a/7b8a8814-3b64-4ddb-84b7-04c853befc4a4.gif)
![一個利用GUI方法實現(xiàn)簡單繪圖功能的應用程序_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/21/7b8a8814-3b64-4ddb-84b7-04c853befc4a/7b8a8814-3b64-4ddb-84b7-04c853befc4a5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、目 錄1. 程序設計內容概論11.1程序設計的目的11.2程序設計的任務12 設計思想12.1需求分析12.2總體設計12.2.1面板布局 12.2.2實現(xiàn)繪畫圖形22.2.3填充功能22.2.4畫筆的粗細及畫筆的顏色變更22.2.5實現(xiàn)鼠標單擊和鼠標拖拽進行繪圖22.3編程環(huán)境32.4.工具說明33 系統(tǒng)流程44 設計uml類圖55 設計層次結構樹66 運行結果與分析77 設計總結128.參考文獻139.附錄141 程序設計內容概論1.1程序設計的目的 本程序是一個利用gui方法實現(xiàn)簡單繪圖功能的應用程序。1.2程序設計的任務程序主要創(chuàng)建了5個jradiobutton, 1個jcheckbo
2、x,2個jbutton以及一個jslider用于選擇繪畫功能操作。接著創(chuàng)建三個面板用于設計繪圖的整體畫板,并利用按鈕監(jiān)聽器,滑動條和鼠標操作實現(xiàn)在面板上繪圖的簡單功能。在程序中,利用創(chuàng)建jradiobutton實現(xiàn)多選一繪畫功能,創(chuàng)建jcheckbox實現(xiàn)填充功能,而2個jbutton則分別實現(xiàn)顏色更變和清除畫板。同時本程序使用了鼠標點擊,鼠標釋放和鼠標拖拽來進行畫板繪畫,利用鼠標點擊實現(xiàn)初點坐標獲取,在繪畫曲線時,主要通過鼠標拖拽實現(xiàn)在畫板上不斷繪制(不斷進行末點坐標賦值初點);在繪畫直線時,主要通過鼠標拖拽達到動態(tài)效果,并通過鼠標釋放最終描繪出直線;在繪畫矩形和圓時,主要通過鼠標拖拽達到動
3、態(tài)效果,并通過鼠標釋放最終描繪出矩形和圓;在繪畫粗線時,主要通過不斷重畫實心圓來實現(xiàn)。 2 設計思想2.1需求分析2.1.1面板布局2.1.2實現(xiàn)繪畫圖形(曲線,直線,圓,橢圓,矩形)3.1.3填充功能(其中包括圓的填充,橢圓圓的填充,矩形圓的填充)3.1.4畫筆的粗細及畫筆的顏色變更3.1.5實現(xiàn)鼠標單擊和鼠標拖拽進行繪圖2.2總體設計2.2.1面板布局主要創(chuàng)建5個jradiobutton, 1個jcheckbox,2個jbutton以及一個jslider,同時創(chuàng)建三個面板(一個面板用于繪圖,一個面板用于把所有按鈕及滑動條等添加進去,一個面板用于把已經添加了按鈕和滑動條的面板添加進去,用于區(qū)
4、分繪圖面板和按鈕面板的位置),利用盒式布局管理器將所有的組件(包括5個jradiobutton, 1個jcheckbox,2個jbutton以及一個jslider)進行布局,再利用邊界布局管理器對面板進行位置編排,繪圖面板在中間,另一個在西邊。最終完成了畫板的布局。2.2.2實現(xiàn)繪畫圖形(曲線,直線,圓,橢圓,矩形)在實現(xiàn)繪畫的功能,主要通過創(chuàng)建buttongroup從而把所有的jradiobutton都添加進去,從而達到在描繪圖形時多選一的選擇功能;利用按鈕監(jiān)聽器,利用object source=event.getsource()語句當source=op1時進行曲線繪畫,在實現(xiàn)曲線繪畫的功能
5、時,主要利用了鼠標的點擊和鼠標的拖拽,通過鼠標的點擊來撲捉第一個坐標點,然后利用鼠標的拖拽來不斷變換第一個點的坐標(利用sx=x和sy=y語句),從而將所有點都連接起來,最終實現(xiàn)了在畫板上描繪曲線的功能;當source=op2時進行直線繪畫,在實現(xiàn)直線繪畫的功能時,主要利用了鼠標的點擊,鼠標的釋放和鼠標的拖拽,通過鼠標的點擊來撲捉直線的第一個坐標點,然后利用鼠標的拖拽選擇直線的另一個點,最終通過鼠標的釋放在畫板上描繪出直線來;當source=op3時進行圓和橢圓繪畫,在實現(xiàn)圓和橢圓繪畫的功能時,主要利用了鼠標的點擊,鼠標的釋放和鼠標的拖拽,通過鼠標的點擊來撲捉圓和橢圓的一個坐標點,然后利用鼠標
6、的拖拽選擇圓和橢圓的大小,最終通過鼠標的釋放在畫板上描繪出圓和橢圓來;當source=op4時進行矩形繪畫,在實現(xiàn)矩形繪畫的功能時,主要利用了鼠標的點擊,鼠標的釋放和鼠標的拖拽,通過鼠標的點擊來撲捉矩形的一個坐標點,然后利用鼠標的拖拽選擇矩形的大小,最終通過鼠標的釋放在畫板上描繪出矩形來。2.2.3填充功能(其中包括圓的填充,橢圓圓的填充,矩形圓的填充)通過jcheckbox創(chuàng)建一個按鈕,利用按鈕監(jiān)聽器決定是否要描繪填充圖形,如果是則將實現(xiàn)賦值fill=true,否則fill=false,然后通過布爾值判斷在描繪圖形時是draw還是fill,如果布爾值是ture時則實現(xiàn)了圖形的填充。2.2.4
7、畫筆的粗細及畫筆的顏色變更畫筆的粗細主要是通過不斷地重畫填充圓來實現(xiàn),通過鼠標的拖拽不斷地在畫板上進行重畫;而粗細則由創(chuàng)建的jslider來調節(jié)圓的半徑, 如果圓的半徑越大則所繪出的曲線越粗,反則越細;畫筆的顏色變更主要通過創(chuàng)建的jbutton按鈕,利用按鈕監(jiān)聽器,當按下了按鈕,則實現(xiàn)c=jcolorchooser.showdialog(right,choose,c)語句,從而把初始的畫筆顏色(黑色)改變。2.2.5實現(xiàn)鼠標單擊和鼠標拖拽進行繪圖 通過語句right.addmouselistener和語句addmousemotionlistener(new listen1()來設計在right
8、面板上進行鼠標單擊和鼠標拖拽等繪圖,通過鼠標的單擊(mousepressed)獲取圖形的第一個點,再利用鼠標的拖拽(mousedragged)選擇圖形的形狀,大小和方向等。2.3編程環(huán)境 本次編程的環(huán)境為jdk。2.4.工具說明 本次編程工具為ultraedit。3 系統(tǒng)流程開始填充畫筆粗細清除顏色粗線按鈕矩形按鈕畫圓按鈕直線按鈕曲線按鈕f=2f=3f=4f=5f=1填充 y nsize 改變fill=falsefill=true改變顏色輸入顏色 y n f=5f=4f=3f=2f=1畫出粗線畫出矩形畫出圓畫出直線畫出曲線結束畫板 4 設計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 設計層次結構樹jframejpanel(border layout)jpanelcenter-rig
10、htjpanelwest-left(vertial box layout)jradiobuttonjradiobuttonjradiobuttonjradiobuttonjradiobuttonjcheckboxjbuttonjbuttonjsliderjlabel6 運行結果與分析6.1 整體畫板展示畫板分析:利用盒式布局管理器將所有的組件(包括5個jradiobutton, 1個jcheckbox,2個jbutton以及一個jslider)進行布局,再利用邊界布局管理器對面板進行位置編排,繪圖面板在中間(center),另一個在西邊(west)。6.2用曲線、直線、圓、矩形畫黑白小屋子6.
11、3用粗線寫祝福語6.4用填充效果畫圖6.5.用帶有顏色的畫筆畫圖7 設計總結在本次java課程設計中,我設計了一個繪圖應用程序。該繪圖應用程序實現(xiàn)了畫曲線,直線,畫圓,畫矩形和粗線功能,同時可以實現(xiàn)圖形的填充和顏色的變換,另外還設計了一個清除畫板按鍵,可以應用于平時一些簡單的畫圖操作。在本繪圖應用程序中,所存在的問題是圖形的種類不夠完善,未能實現(xiàn)畫弧,畫多邊形等功能,另外一個不足的地方時整個畫板只能畫一種顏色的圖形,未能滿足更高要求的繪畫需要。在本次java課程設計中,我收獲了很多。特別是在編寫java程序時,必須先對程序的功能進行初步的分析,得到程序中每一個功能所需要用到的方法或思路,同時根
12、據(jù)功能的相似來設計一類功能的實現(xiàn),并通過某些語句的改變達到多功能效果,例如在本次設計中,分析可得圓和矩形有很大的相似度,利用drawoval和drawrect的變換可以達到繪畫的效果。在設計圖形的填充時,我參考了本學期所學的jcheckbox方法和判斷語句,有效地處理了圖形的填充問題,并系統(tǒng)地學習了鼠標拖拽的應用。在本次設計中,最難處理的問題是用鼠標拖拽來畫直線,圓和矩形,因為在使用鼠標拖拽時,會出現(xiàn)在畫板上不斷重畫的效果,無法達到自己想要的效果,后來在同學的幫助和參考部分java教科書下,成功了解決了這個問題,而在解決這個問題,使我認識到學習不能只局限于課本,必要時應該要多閱讀一些相關的ja
13、va書籍,從而讓自己的知識面更加廣,處理問題更加有效率。所以,經過本次編寫繪圖應用程序,使我把本學期所學的java知識充分地運用到課程設計中來,既提高了自己學習的主動性,同時為自己以后的學習打下了更深的基礎。參考文獻1 john lewis、willian loftus,java程序設計教程,北京:電子工業(yè)出版社,2009;2 楊樹林、胡潔萍,java語言最新實用案例教程,北京:清華大學出版社,2006;3 譚浩強,c程序設計,北京:清華大學出版社,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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湘教版數(shù)學八年級下冊4.5《一次函數(shù)的應用》聽評課記錄3
- 湘教版九年級數(shù)學下冊2.6弧長與扇形面積第1課時弧長聽評課記錄
- 八年級上冊道德與法治第一單元 走進社會生活則 復習聽課評課記錄
- 蘇科版數(shù)學八年級下冊《9.1 圖形的旋轉》聽評課記錄2
- 蘇教版小學五年級上冊數(shù)學口算練習題
- 出國勞務派遣合同范本
- IT程序員保密協(xié)議書范本
- 深圳經濟特區(qū)房產抵押貸款協(xié)議書范本
- 全國事業(yè)單位聘用合同范本
- 鄉(xiāng)村振興戰(zhàn)略合作合同范本
- GB/T 6404.2-2005齒輪裝置的驗收規(guī)范第2部分:驗收試驗中齒輪裝置機械振動的測定
- GB/T 11376-2020金屬及其他無機覆蓋層金屬的磷化膜
- 成功源于自律 主題班會課件(共34張ppt)
- 分析化學(第6版)全套課件完整版電子教案最新板
- 海上日出配套說課PPT
- 新青島版(五年制)五年級下冊小學數(shù)學全冊導學案(學前預習單)
- (完整word版)重點監(jiān)管的危險化學品名錄(完整版)
- 高級工程師電子版職稱證書在網上打印步驟
- 詳情頁測試文檔20220802
- 品牌形象的12個原型
- 專利糾紛行政調解辦案指南
評論
0/150
提交評論