版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 摘要隨著科學(xué)技術(shù)的不斷提高,計算機科學(xué)日漸成熟,其強大的功能已為人們深刻認識,它已進入人類社會的各個領(lǐng)域并發(fā)揮著越來越重要的作用。JAVA是一門很優(yōu)秀的編程語言,具有面向?qū)ο?、與平臺無關(guān)、安全、穩(wěn)定和多線程等特點,是目前軟件設(shè)計中極為健壯的編程語言。JAVA不僅可以用來開發(fā)大型的應(yīng)用程序。而且特別適合Internet的應(yīng)用開發(fā)。JAVA確實具備“一次寫成,處處運行”的特點,JAVA以成為網(wǎng)絡(luò)時代最重要的編程語言之一。本報告中介紹了用JAVA語言實現(xiàn)畫筆系統(tǒng)的全部過程。本次課程設(shè)計是配合JAVA程序設(shè)計課程,幫助我們深入學(xué)習(xí)掌握JAVA語言,熟練運用這個工具來編寫的。通過課程設(shè)計各個項目的綜合
2、訓(xùn)練,培養(yǎng)學(xué)生實際分析問題、編程和動手能力、提高學(xué)生的綜合素質(zhì)。本課程設(shè)計嘗試使用一些較生動的示例和設(shè)計項目,激發(fā)學(xué)生學(xué)習(xí)興趣,引導(dǎo)學(xué)生主動學(xué)習(xí),正確理解、接受需要重點掌握的知識點,為參加項目開發(fā)及更深入學(xué)習(xí)做好準備。本次課程設(shè)計主要是用JAVA實現(xiàn)畫筆系統(tǒng),其系統(tǒng)主要完成以下功能:設(shè)計一個畫圖程序,能夠?qū)崿F(xiàn)畫筆、畫直線、畫圓形、畫矩形、修改該畫筆的大小以及顏色。該畫圖程序還需具有橡皮擦功能以及清空整個畫面的功能關(guān)鍵詞:畫圖工具,JAVA目錄摘要目錄TOC o 1-5 h z HYPERLINK l bookmark4 o Current Document 緒論3 HYPERLINK l bo
3、okmark6 o Current Document 開發(fā)環(huán)境介紹4需求分析錯誤!未定義書簽??傮w目標要實現(xiàn)的功能7 HYPERLINK l bookmark10 o Current Document 4概要設(shè)計84.1設(shè)計準備8需要用到的類8 HYPERLINK l bookmark12 o Current Document 5.詳細設(shè)計955類的設(shè)計9類的方法設(shè)計96.測試數(shù)據(jù)及運行結(jié)果7.總結(jié)158.參考文獻159.源程序151.緒論Java不依賴平臺的特點使它受到廣泛的關(guān)注,Java已成為網(wǎng)絡(luò)時代最重要的語言之一。目前,Java語言不僅是一門被廣泛使用的編程語言,而且已成為軟件設(shè)計開發(fā)
4、者應(yīng)當(dāng)掌握的一門基礎(chǔ)語言。因為很多新的技術(shù)領(lǐng)域都涉及到Java語言,國內(nèi)外許多大學(xué)已將Java語言列入本科教學(xué)計劃,而IT行業(yè)對Java人才的需求也在不斷的增長,因此,掌握Java已經(jīng)成為共識。Java是一門說簡單也不簡單,說難也不難的課程。所以,我們在學(xué)習(xí)的過程中要根據(jù)自己的具體情況,合理安排編程訓(xùn)練時間,相信編程能力會在不知不覺中得到提高。在此次的課程設(shè)計實踐中,我學(xué)到了教科書上沒有的東西。這次課程設(shè)計,我按照課程設(shè)計的要求,分塊實現(xiàn)程序的功能。在實踐中我遇到許多的問題,但我都克服,最終我成功的完成了這次課程設(shè)計。從中我充分理解了Java面對對象的特性,并體會到Java與C語言的不同之處在
5、實踐的同時,我又從中成長了許多,特別是在對程序的編譯和調(diào)試中掌握了許多的技巧和方法,為今后的其他計算機語言的學(xué)習(xí)奠定了一定的基礎(chǔ)開發(fā)環(huán)境介紹該項目所使用的軟件開發(fā)環(huán)境如下:操作系統(tǒng):Windowsxp開發(fā)工具:eclipse3.2及其VE插件Eclipse簡介Eclipse是一個開放源代碼的、基于Java的可擴展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運的是,Eclipse附帶了一個標準的插件集,包括Java開發(fā)工具。Eclipse是著名的跨平臺的自由集成開發(fā)環(huán)境(IDE)。最初主要用來Java語言開發(fā),但是目前亦有人通過插件使其作為其他計算機語言比如
6、C+和Python的開發(fā)工具。Eclipse的本身只是一個框架平臺,但是眾多插件的支持使得Eclipse擁有其他功能相對固定的IDE軟件很難具有的靈活性。許多軟件開發(fā)商以Eclipse為框架開發(fā)自己的IDE。Eclipse最初由OTI和IBM兩家公司的IDE產(chǎn)品開發(fā)組創(chuàng)建,起始于1999年4月。IBM提供了最初的Eclipse代碼基礎(chǔ),包括Platform、JDT和PDE。目前由IBM牽頭,圍繞著Eclipse項目已經(jīng)發(fā)展成為了一個龐大的Eclipse聯(lián)盟,有150多家軟件公司參與到Eclipse項目中,其中包括Borland、RationalSoftware、RedHat及Sybase等。E
7、clipse是一個開發(fā)源碼項目,它其實是VisualAgeforJava的替代品,其界面跟先前的VisualAgeforJava差不多,但由于其開放源碼,任何人都可以免費得到,并可以在此基礎(chǔ)上開發(fā)各自的插件,因此越來越受人們關(guān)注。近期還有包括Oracle在內(nèi)的許多大公司也紛紛加入了該項目,并宣稱Eclipse將來能成為可進行任何語言開發(fā)的IDE集大成者,使用者只需下載各種語言的插件即可。需求分析3.1要實現(xiàn)的功能1)完成畫線、畫直線、畫矩形、畫圓及擦除(橡皮擦功能)2)可以設(shè)置畫筆顏色3)可以設(shè)置畫筆寬度4)使用面向?qū)ο蟮姆椒ǜ乓O(shè)計4.1設(shè)計準備1、此程序為實現(xiàn)這些功能模塊,必須首先定義一個
8、工具面板,將這些畫筆、畫箭頭、橢圓、圓、多邊形直線、畫矩形、畫筆顏色、畫筆大小、橡皮等功能組件放入這個工具面板中。2、此程序為實現(xiàn)利用鼠標做畫筆的功能,必會產(chǎn)生鼠標事件MouseEvent。因此,為實現(xiàn)鼠標畫圖的功能,必須用到鼠標觸發(fā)事件,故在此程序中,必須實現(xiàn)“委托事件模型”,用到事件源、事件對象以及監(jiān)聽者對象。3、此程序中,必須用到的包如下:importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;4.2需用到的類classMycanvas此類用于定義一組數(shù)據(jù)成員,并且使用構(gòu)造函數(shù)將他們分別初使化,以方便在下面的程序中使用他們。
9、2)classMyframe此類用于實現(xiàn)這個程序的大部分功能,在這個類中除了定義一些基本變量以及構(gòu)造函數(shù)外,還定義了很多成員方法,這些成員方法將實現(xiàn)鼠標觸發(fā)事件的一系列繪圖功能。3)publicclassText這個類是主類,是程序得以運行的入口。在這個主類中定義了主方法,是該程序執(zhí)行的入口。詳細設(shè)計5.1類的設(shè)計1)classMycanvas在這個類中定義了用于截斷的一系列標志變量,有初始坐標、顏色、工具選擇等,并且在這個類中還定義了構(gòu)造函數(shù)voidsetx1(intx1),用于完成對這些變量的初始化工作。2)classMyframe這個類用來實現(xiàn)整個程序的大部分功能,并且在這個類中定義了大
10、部分的成員函數(shù)和成員方法,在這個類中用到的主要成員方法如下:publicvoidactionPerformed(ActionEvente)publicvoiditemStateChanged(ItemEvente)publicvoidmousePressed(MouseEvente)publicvoidmouseRelesed(MouseEvente)publicvoidmouseEntered(MouseEvente)publicvoidmouseExited(MouseEvente)publicvoidmouseClicked(MouseEvente)publicvoidmouseDrag
11、ged(MouseEvente)publicvoidmouseMoved(MouseEvente)5.2類的方法介紹定義的變量:在這個類中,首先定義了畫筆的大小、畫筆的顏色、畫筆的粗細、橡皮的大小、工具的選擇等一些變量,并且還用到了系統(tǒng)中自帶的一些類初使化了一些面板工具對象,用于完成對面板工具、畫直線、畫橢圓、畫矩形、橡皮擦、清除等一些工具按鈕的定義。初使化構(gòu)造函數(shù):在這個初使化構(gòu)造函數(shù)中,首先繼承了父類Frame,然后初使化了各工具按鈕以及各個選擇項,包括顏色選擇、畫筆大小選擇、橡皮大小選擇,并且將這些組件添加到了工具面板中,最后還對各個組件注冊了事件監(jiān)聽者對象。paint()方法:這個方法
12、主要用于在Applet的界面中顯示文字、圖形和其它界面元素。本程序中,在這個方法中,定義了一些工具選項設(shè)置,給用戶選擇畫筆、畫直線、畫圓、橡皮擦等一些功能。itemStateChanged()方法:這個方法用來實現(xiàn)的功能很簡單,主要是用來改變畫筆大小、畫筆顏色、橡皮大小的。在此方法中,設(shè)置了大小以及顏色的一些預(yù)選項,以供用戶對大小以及顏色做出選擇。mouseDragged()方法:此方法是處理MouseEvent事件以實現(xiàn)MouseMotionListener接口的對象。MouseMotionListener是事件監(jiān)聽者,mouseDragged(MouseEvente)是成員方法,代表鼠標拖
13、動事件,在這個方法中,還用到了MouseEvent類常用成員方法:publicintgetX()以及publicintgetY(),用來返回發(fā)生鼠標事件的X及Y的坐標。這個方法中,主要用來控件畫筆和橡皮的轉(zhuǎn)換。mousePressed()方法:此方法是處理MouseEvent事件以實現(xiàn)MouseListener接口的對象。MouseListener是事件監(jiān)聽者,mouseDPressed(MouseEvente)是成員方法,代表鼠標按下事件。這個方法主要用來控件用戶畫直線、畫圓、畫矩形這些功能之間的轉(zhuǎn)換。mouseReleased()方法:mouseEntered()方法:mouseExite
14、d()方法:mouseClicked()方法:這些方法和mousePressed()方法屬于同一類,他主要用來表示鼠標釋放事件,是對上述各個功能完成后對鼠標事件的又一次觸發(fā)。3、畫直線、畫圓、畫矩形7.總結(jié)此軟件基本達到理想效果,在編寫這一軟件的過程中我學(xué)到了很多java編程知識,并學(xué)會了如何快速的改正程序中的錯誤。在本次java課程設(shè)計中,我收獲了很多。特別是在編寫java程序時,必須先對程序的功能進行初步的分析,得到程序中每一個功能所需要用到的方法或思路,同時根據(jù)功能的相似來設(shè)計一類功能的實現(xiàn),并通過某些語句的改變達到多功能效果。這次課程設(shè)計使我受益匪淺,鍛煉了我做事堅持不懈的心態(tài),也使我
15、的自學(xué)能力也有了一定的提高,我更明白了搞計算機這行,要學(xué)到真正的技術(shù)完全要靠自己,在課堂上只能學(xué)到最基本的東西,但這最基本的東西也一定要學(xué)好。8.參考文獻java2實用教程耿祥于、張躍平編著清華大學(xué)出版社9.源程序packagesdrc;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;classMycanvasextendsCanvasintx1,y1,x2,y2,x3,y3,r;intd=3;inthuabi=1;doublex=newdouble8,y=newdouble8;intx4=newint8,y4=newin
16、t8;DoubleX=newDouble8,Y=newDouble8;Colorc;Mycanvas()setBackground(Color.white);voidsetx1(intx1)this.x1=x1;voidsety1(inty1)this.y1=y1;voidsetx2(intx2)this.x2=x2;voidsety2(inty2)this.y2=y2;voidsetx3(intx3)this.x3=x3;voidsety3(inty3)this.y3=y3;voidsetcolor(Colorc)this.c=c;voidsetarc(intd)this.d=d;voids
17、etr(inte)r=e;voidsethuabi(inthuabi)this.huabi=huabi;publicvoidpaint(Graphicsg,inti)g.setColor(c);Graphics2Dg_2d=(Graphics2D)g;BasicStrokebs=newBasicStroke(huabi,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER);g_2d.setStroke(bs);if(i=1)g.drawOval(x1,y1,x2,y2);elseif(i=2)g.drawLine(x1,y1,x2,y2);elseif(i
18、=3)g.drawRect(x1,y1,x2,y2);publicvoidPaint(Graphicsg)Graphics2Dg_2d=(Graphics2D)g;BasicStrokebs=newBasicStroke(huabi,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER);g_2d.setStroke(bs);for(inti=0;id;i+)Xi=newDouble(xi);x4i=XValue();Yi=newDouble(yi);y4i=YValue();for(inti=0;id;i+)g.drawLine(x4i
19、%d,y4i%d,x4(i+1)%d,y4(i+1)%d);publicvoidpaintk(Graphicsg)g.setColor(c);Graphics2Dg_2d=(Graphics2D)g;BasicStrokebs=newBasicStroke(huabi,BasicStroke.CAP_ROUND,BasicStroke.JOIN_MITER);g_2d.setStroke(bs);doubleH=10;doubleL=7;intx3=0;inty3=0;intx4=0;inty4=0;doubleawrad=Math.atan(L/H);doublearraow_len=Mat
20、h.sqrt(L*L+H*H);doublearrXY_1=rotateVecx2-x1,y2-y1,awrad,true,arraow_len);doublearrXY_2=rotateVec(x2-x1,y2-y1,-awrad,true,arraow_len);doublex_3=x2-arrXY_10;/(x3,y3)是第一端點doubley_3=y2-arrXY_11;doublex_4=x2-arrXY_20;/(x4,y4)是第二端點doubley_4=y2-arrXY_21;DoubleX3=newDouble(x_3);x3=X3.intValue();DoubleY3=ne
21、wDouble(y_3);y3=Y3.intValue();DoubleX4=newDouble(x_4);x4=X4.intValue();DoubleY4=newDouble(y_4);y4=Y4.intValue();/g.setColor(SWT.COLOR_WHITE);/畫線g.drawLine(x1,y1,x2,y2);g.drawLine(x2,y2,x3,y3);g.drawLine(x2,y2,x4,y4);publicdoublerotateVec(intpx,intpy,doubleang,booleanisChLen,doublenewLen)doublemathst
22、r=newdouble2;doublevx=px*Math.cos(ang)-py*Math.sin(ang);doublevy=px*Math.sin(ang)+py*Math.cos(ang);if(isChLen)doubled=Math.sqrt(vx*vx+vy*vy);vx=vx/d*newLen;vy=vy/d*newLen;mathstr0=vx;mathstr1=vy;returnmathstr;classMyframeextendsFrameimplementsActionListener,ItemListener,MouseListener,MouseMotionList
23、enerMycanvascanvas;Graphicsg;intx,y,z,r;intp,q;intflag=0;intxiangpi=4;inthuabi=1;Panelpanel1,panel2,panel3;Labellabel1,label2,label3,label5,label6;Buttonb1,b2,b3,b4,b6,b7,b8,b9;TextFieldt1,t2,t3,t4,t5,t6,t7;BoxbaseBox,boxl,box2,box3;Choicechoice,choice2,choice3;Myframe()super(”畫圖工具”);canvas=newMycan
24、vas();choice=newChoice();choice2=newChoice();choice3=newChoice();labell=newLabel(操作);label2=newLabel(參數(shù));label3=newLabel(顏色);label5=newLabel(橡皮擦”);label6=newLabel(畫筆);panel1=newPanel();panel2=newPanel();panel3=newPanel();b1=newButton(圓);b2=newButton(橢圓);b3=newButton(直線);b4=newButton(矩形);b6=newButton
25、(清除);b7=newButton(退出);b8=newButton(橡皮擦);b9=newButton(繪畫);t1=newTextField(5);t2=newTextField(5);t3=newTextField(5);t4=newTextField(5);choice.add(紅);choice.add(綠);choice.add(藍);choice.add(黃);choice.add(青);choice.add(橙);choice.add(黑);choice2.add(4);choice2.add(10);choice2.add(20);choice2.add(50);choice
26、2.add(100);choice2.add(200);choice3.add(1);choice3.add(3);choice3.add(8);choice3.add(10);choice3.add(13);choice3.add(16);b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);b4.addActionListener(this);b6.addActionListener(this);b7.addActionListener(this);b8.addActionListe
27、ner(this);b9.addActionListener(this);choice.addItemListener(this);choice2.addItemListener(this);choice3.addItemListener(this);boxl=Box.createHorizontaLBox();box1.add(label1);boxl.add(Box.createHorizontaLStrut(4);box1.add(b1);boxl.add(Bcx.createHorizontaLStrut(8);box1.add(b2);boxl.add(Box.createHoriz
28、ontaLStrut(8);box1.add(b3);boxl.add(Box.createHorizontaLStrut(8);box1.add(b4);box2=Box.createHorizontaLBox();box2.add(label2);box2.add(Box.createHorizontaLStrut(8);box2.add(t1);box2.add(Box.createHorizontaLStrut(5);box2.add(t2);box2.add(Box.createHorizontaLStrut(5);box2.add(t3);box2.add(Box.createHo
29、rizontaLStrut(5);box2.add(t4);box3=Box.createHorizontaLBox();box3.add(label3);box3.add(Box.createHorizontaLStrut(5);box3.add(choice);box3.add(Box.createHorizontaLStrut(5);box3.add(label5);box3.add(Box.createHorizontaLStrut(5);box3.add(choice2);box3.add(Box.createHorizontaLStrut(5);box3.add(label6);b
30、ox3.add(Box.createHorizontaLStrut(5);box3.add(choice3);baseBox=Box.createVerticaLBox();baseBox.add(box1);baseBox-add(Bcx.createVerticaLStrut(5);baseBox.add(box2);baseBox.add(Box.createVerticaLStrut(5);baseBox.add(box3);panell.add(baseBox);panell.setBackground(Color.gray);panel3.add(panel1,BorderLayo
31、ut.WEST);panel2.add(b6);panel2.add(b7);panel2.add(b8);panel2.add(b9);panel2.setBackground(Color.gray);panel3.add(panel2,BorderLayout.EAST);add(panel3,BorderLayout.NORTH);add(canvas,BorderLayout.CENTER);canvas.addMouseListener(this);canvas.addMouseMotionListener(this);setBackground(Color.darkGray);se
32、tBounds(100,100,200,200);setVisible(true);validate();publicvoidactionPerformed(ActionEvente)inta,b,c;g=canvas.getGraphics();if(e.getSource()=b7)System.exit(0);elseif(e.getSource()=b6)canvas.update(g);elseif(e.getSource()=b8)flag=1;elseif(e.getSource()=b9)flag=0;x=Integer.parseInt(t1.getText();y=Inte
33、ger.parseInt(t2.getText();z=Integer.parseInt(t3.getText();r=Integer.parseInt(t4.getText();canvas.setx1(x);canvas.sety1(y);canvas.setx2(z);canvas.sety2(r);if(e.getSource()=b1|e.getSource()=b2)canvas.paint(g,1);elseif(e.getSource()=b3)canvas.paint(g,2);elseif(e.getSource()=b4)canvas.paint(g,3);publicv
34、oiditemStateChanged(ItemEvente)if(e.getSource()=choice)if(choice.getSelectedIndex()=0)canvas.setcolor(Color.red);if(choice.getSelectedIndex()=1)canvas.setcolor(Color.green);if(choice.getSelectedIndex()=2)canvas.setcolor(Color.blue);if(choice.getSelectedIndex()=3)canvas.setcolor(Color.yellow);if(choi
35、ce.getSelectedIndex()=4)canvas.setcolor(Color.cyan);if(choice.getSelectedIndex()=5)canvas.setcolor(Color.orange);if(choice.getSelectedIndex()=6)canvas.setcolor(Color.black);elseif(e.getSource()=choice2)if(choice2.getSelectedIndex()=0)xiangpi=4;if(choice2.getSelectedIndex()=1)xiangpi=10;if(choice2.getSelectedIndex()=2)xiangpi=20;if(choice2.getSelectedIndex()=3)xiangpi=50;if(choice2.getSelectedIndex()=4)xiangpi=100;if(choice2.getSelectedIndex()=5)xiangpi=200;elseif(e.getSource()=choice3)if(choice3.g
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026吉林長春中國一汽研發(fā)總院全球校園招聘備考題庫(含答案詳解)
- 初一綜合考試題類型及答案
- 2025-2026人教版小學(xué)二年級體育上學(xué)期期末測試卷
- 寧波護士考編試題及答案
- 2025-2026人教版五年級勞技上期測試卷
- 老年護理中的技術(shù)支持與安全
- 2025 小學(xué)六年級科學(xué)上冊科學(xué)教育中的數(shù)據(jù)學(xué)習(xí)處理方法課件
- 2025-2026七年級地理上學(xué)期期末湘教卷
- 《飛行汽車電池管理系統(tǒng)技術(shù)規(guī)范》(征求意見稿)
- 腸易激綜合征的營養(yǎng)調(diào)理方案
- T-ZJZYC 022-2024 靈芝工廠化生產(chǎn)技術(shù)規(guī)程
- 拖欠工程款上訪信范文
- 畢氏族譜完整版本
- 制造業(yè)工業(yè)自動化生產(chǎn)線方案
- 23J916-1 住宅排氣道(一)
- (正式版)JB∕T 7052-2024 六氟化硫高壓電氣設(shè)備用橡膠密封件 技術(shù)規(guī)范
- 股權(quán)融資與股權(quán)回購協(xié)議
- 企業(yè)人才發(fā)展方案
- ISO 31000-2023 風(fēng)險管理 中文版
- 花城版音樂七年級下冊53康定情歌教案設(shè)計
- 燃料質(zhì)量化學(xué)技術(shù)監(jiān)督
評論
0/150
提交評論