<noframes id="ixm7d"><noframes id="ixm7d"><rt id="ixm7d"><delect id="ixm7d"></delect></rt><noframes id="ixm7d"><rt id="ixm7d"><rt id="ixm7d"></rt></rt><rt id="ixm7d"></rt> <noframes id="ixm7d"><rt id="ixm7d"><delect id="ixm7d"></delect></rt><delect id="ixm7d"></delect><bdo id="ixm7d"></bdo><rt id="ixm7d"></rt><bdo id="ixm7d"></bdo><noframes id="ixm7d"><rt id="ixm7d"><rt id="ixm7d"></rt></rt><rt id="ixm7d"><rt id="ixm7d"></rt></rt><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><rt id="ixm7d"></rt> <noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><noframes id="ixm7d"><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><noframes id="ixm7d"><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d"><rt id="ixm7d"></rt><noframes id="ixm7d">

java實驗報告心得體會

2023-06-30

心得體會是我們接觸事物產生的思想,也是我們明確自身發展目標的重要方式。如何結合自身的成長情況,寫出勉勵自身成長的心得體會呢?今天小編給大家找來了《java實驗報告心得體會》,供大家參考借鑒,希望可以幫助到有需要的朋友。

第一篇:java實驗報告心得體會

JAVA實驗報告心得

北京聯合大學 信息學院

“面向對象程序設計”課

程上機實驗報告

題 目: java上機實驗心得體會

姓名(學號):專 業: 計算機科學與技術

編 制 時 間: 2012年12月19日

版 本: 1.0.0 指 導 教 師:北京聯合大學-信息學院編制

實驗1 熟悉java運行環境

實驗目的:熟悉jdk環境和操作,編寫簡單的java應用程序。

心得體會:在該實驗中,我碰到的問題是jdk環境變量的設置。解決方法是通過查閱資料書和網上搜索相關解決方法及同學的有力幫助。

實驗2 選擇語句練習

實驗目的:正確理解并能夠熟練操作和使用java的if和switch語句。

心得體會:我個人感覺有了c的編程基礎,if和switch這些簡單的流程控制語句運用起來比較輕松,實現簡單的邏輯運算也跟c非常相近,所以上手比較快。但是在這次程序中,首次涉及到了java程序的數據輸入,與c區別很大。但經過老師的講解和查閱相關資料,基本明白相關的使用規則和注意事項。在第二個小題中還涉及到了charat()方法,經查閱jdk文檔,知道charat()方法返回一個位于提供給它的參數索引處的字符,如: str.chatat(0)檢索str中的第一個字符,str.charat(str.length()-1)檢索最后一個字符。我運用此方法解決了比較字符串間首字母異同的問題。

實驗3 迭代練習

實驗4 方法的實現練習

實驗目的:聲明、定義和調用方法,理解實參和形參的含義。

心得體會:在該實驗中,我掌握如何寫方法、調用方法,并掌握如何向方法中傳遞信息和從方法中返回信息。方法聲明為非void(構造方法除外)則需要用return語句返回一個相應類型的返回值。

實驗5 簡單類型數組練習

實驗目的:學習創建簡單類型的數組,并能用循環語句處理數組。

心得體會:通過該實驗,我學會了如何讓建立簡單類型的數組,并掌握了將數組作為方法的傳入參數和返回值。在該實驗中,遇到的問題主要是如何將一個連續的多位數在存入數組時,每個數組元素只對應改多位數的一個組成數。我解決的方法如下: for(i=0; i<6; i++){ n[i] = aa%10; //aa%10的結果是aa的末尾數,將多位數aa的末尾數賦給a[i] aa = (int)aa/10; //對aa/10的結果強制取整,去掉了aa的末尾數,以便對下一位數的存數。 } 實驗6 類和對象的練習

實驗目的:正確理解并能夠熟練操作和使用java的類、對象和方法。 心得體會:我學會了如何建立類和對象,分別輸出其中包含的成員值;以及分別引用各方法,實現不同的操作。在該程序中,我進一步了解了如何定義成員方法和成員屬性以及相關方法的調用。特別是我掌握了利用構造方法對成員屬性賦初始值。值得一提的是,我在相應的程序中運用了touppercase方法,經查看jdk文檔知道該方法的作用是返回一個所有字母都被轉化為大寫字母字符串。

實驗7 類的實現 實驗目的:使用統一建模語言(uml)設計類,并實現類。

心得體會:通過該實驗,我學會了使用public、private控制訪問及其訪問權限;體會了static關鍵字的作用。并對java程序中的類及面向對象的編程思想有了更進一步的了解。

實驗8 繼承的練習

實驗目的:正確理解并能夠熟練操作和使用java類的繼承關系。

心得體會:理解了繼承的含義,并使用uml符號設計了繼承結構;掌握了用java實現繼承關系;學會了區分方法重寫和方法重載;并深入理解了abstract 和 final修飾符的作用。用final標記的變量只能賦值一次,標記的類不可被繼承,方法不可被子類重寫。用關鍵字extends表繼承,例如子類a繼承了父類b則可寫作 class a extends b。在這些概念性知識點弄明白后,在解決實際問題時,碰到了輸入年月日計算車齡的問題,我的解決辦法如下: public int age(int year) { int age; int a1 = (int)(time/10000); //(int)time/10000是將8位數表示的生產年月日強制轉換成四位數表示的年 } int a2 = (int)(year/10000); //將當前年月日轉換為年 age = a2 - a1 +1;//計算車齡 return age; 實驗9 抽象類、接口練習

實驗目的:綜合運用接口,類的知識。

心得體會:在該實驗中,我掌握了接口定義,以及類實現接口。接口用interface關鍵字定義,在接口中,可以用abstract是修飾方法的,也可以去掉abstract,編譯時會默認為抽象方法。類實現接口可用implements表示,例如class circle implements shape表示,circle類實現了接口shape。

實驗10 多態練習

實驗目的:理解并使用面向對象的特征:多態。

心得體會:在實驗10中,我基本掌握了多態的句柄、多態方法的定義。在改程序中,我遇到了要求隨機產生一個圖形的難題,通過網上查閱資料,利用系統函數math.random()經一系列的運算處理來隨機產生一個圖形解決了該難題,具體的程序如下: public static void main(string[] args) { } circle cir = new circle(9); square squ = new square(4); shape shape; int r; r = (int)(math.random()*2);//用math.random()方法產生0.00到if(r == 0) shape = cir; else shape = squ; shape.testshape(shape); //同一條語句產生不同的執行結果,多態1.00的隨機數,乘2取整后非0即1 性。

實驗11 多線程處理

實驗目的:理解線程的基本概念。

心得體會:通過該實驗,基本能夠理解線程的運行了。學會調用thread類中的系統函數以及掌握這些函數的作用是難點, setname()是設置線程名字,start()是開辟一條新線程,thread.currentthread().getname()是獲得正在執行的線程的名字,thread.currentthread().getid()是thread類中返回該線程的標識符的方法,thread.currentthread().getpriority()是thread類中返回線程的優先級的方法。

實驗12 i/o及文件處理

實驗目的:掌握并使用java中的i/o和文件。

心得體會:對于該實驗,由于比較難,只是基本掌握了文件讀寫的方法和規則,還有待17周java實訓時繼續攻堅克難。

結語:在這一系列的實驗中,我基本掌握了java的編程規則、知識要點和一些小技巧,特別是對面向對象的編程思想和風格有了進一步的認識和體會。同時,因正確的編出程序而帶來的成就感讓我對編程更加感興趣。對于在這些實驗過程中,請教老師、同學互助、查閱資料等基本的學習方式,使我更加領悟到集體和團隊的力量,也樹立了敢于攻堅的信心。篇二:java實訓心得 java實訓心得

在上學期的最后一周和本學期的第一周,我和同組的學員在學校機房進行了java暑期實訓,現在已經結束了。

回首上學期的java學習,重點還是在學習概念等一些常識性的東西,application應用程序和applet小程序,它的開發工具、數據類型、變量、接口、輸入輸出流等。學會分析異常,拋出異常,后期主要是小程序運用,gui界面設計和事件。我覺得這兩種程序結構有很大的不同,不管是體系結構還是運行方式,都有很大的區別,而我主要偏向于小程序的學習。因為我感覺它實用性比較大,可以做出很多不錯的游戲、運用程序等,而且它比較靈活。當然學知識不能僅憑自己的愛好和一時興趣,要一步一個腳印、認認真真、踏踏實實,理論與實踐相結合。在掌握課本實例和內容之后,要有一定的擴展閱讀和課外學習,充分全面的了解java的應用和擴展運用。在我所學的語言當中,我自認為java是一門比較強大的面向對象編程語言。不僅僅因為它的跨平臺性,更多的是因為它的靈活多變和實用性,而且它比較的經典和強悍。

這次實訓,面對老師布置的任務,一開始有些慌張和無措。不過,事后我首先想到這和課本上的某些知識具有結合點,回憶和分析了老師教過的算法和具體實施方法,并綜合考慮了其他的方面。在編寫時,一個小小的符號、一個常量變量的設定,這都無不考量著我的細心和嚴謹。所以學習java,不僅對我們以后學習其他語言有很大

的好處,而且也讓我們知道了和理解了作為一個編程人員首先應具有的良好心理素質,那就是冷靜思考和專心致志。

在此次實訓中,我意識到一個好的編程人員要善于溝通和團結拼搏。實訓結束后,我覺得要學好一門計算機語言必須牢記以下幾點: 1. 態度第一 2.興趣是關鍵 3.敢于挑戰 4.不懈追求

實訓結束了,大家都有一種解脫的感覺。當然我想自己更多的是興奮和一點點的成就感?,F在我覺得,學習java要不斷的復習和運用,做到舉一反三,將所學知識充分融入到平時的學習生活中去,從而為以后的工作打好堅實的基礎。感謝學校和老師能夠為我們提供這次機會,讓我們更好的掌握和了解java這門語言。

通過這次實訓,我真的從中學到了很多東西。我對這個介于人類與非人類之間的計算機編程語言有了較上學期更進一步的認識。其間開心過、郁悶過、無奈過、彷徨過„„隨著實訓的圓滿成功與實驗報告的順利完成,有點微微的自豪感使人難忘。至于我做的程序,還不是很完善,所以我將一直去完善它,不斷地學習下去。伴隨著學習的深入,我發現高深的東西還有很多很多,等待著我自己去發掘。對于java語言,我會更加努力。 2011/9/10篇三:java實驗報告 java程序設計實驗報告

題目: 研究java中的for循環

院(系)

專 業 信息與計算科學

班 級 101001班

姓 名 學 號 101001113 導 師 2012年 11月 26日 for循環程序設計

【實驗目的】通過對for循環學習,了解java中的循環語句的應用和它們的用法。

【實驗原理】for(表達式1;表達式2;表達式3){ //循環體 } 表達式1一般是一個賦值語句,它用來給循環控制變量 賦初值;表達式2是一個布爾類型的表達式,它決定什么時候退出循環;表達式3一般用來修改循環變量,控制變量每循環一次后按什么方式變化。這三個部分之間用“;”隔開。

【實驗要求】windows操作系統(32位),安裝jdk1.6,eclipse運行環境

【實驗步驟】

(2)按給定的題目寫出符合語法分析方法,按給定的題目給出語法分析方法的思想及分析表設計。

(3)按給定的題目給出中間代碼序列的結構設計。對于for循環的具體操作,見程序test1(圖1)

圖1 for循環語句

(4)探究if與for循環嵌套,及其其他循環語句的使用,與for循環使用的差別,見程序(圖2圖3)

圖2 if與for嵌套

圖3 switch循環

【問題與解決方法】(1)如圖1和2,這個兩個程序中,主要遇到的問題在for后面的(表達式1;表達式2;表達式3)里面表示的書寫,以及怎樣把if嵌套在for語句中。(2)如圖3,這個程序中,將其它循環使用的方法搞混。

解決方法:通過查閱資料,熟記了幾個循環的使用方法,及其注意事項,將錯誤的一一修改。

【實驗總結】通過這個實驗,我已熟悉掌握了for等循環語句的用法,for它既可以單獨用,也可以嵌套在for等循環語句中,增加了程序可讀行,方便編程,為以后的學習java起到了一定鋪墊作用,不過還需要多練習,才能熟能生巧,為以后java編程起到一定作用。 參考文獻:

1.郎波.java語言程序設計.(第二版).-北京:清華大學出版社,2010.9篇四:最新java實訓報告總結心得

一、實訓項目

簡易記事本

二、實訓目的和要求

本次實訓是對前面學過的所有面向對象的編程思想以及java web編程方法的一個總結、回顧和實踐,因此,開始設計前學生一定要先回顧以前所學的內容,明確本次作業設計所要用到的技術點并到網上搜索以及查閱相關的書籍來搜集資料。通過編寫采用jsp+servlet+javabean技術框架的應用系統綜合實例,以掌握java web開發技術。

具體要求有以下幾點:

1. 問題的描述與程序將要實現的具體功能。 2. 程序功能實現的具體設計思路或框架,并檢查流程設計。 3. 代碼實現。

4. 設計小結。

三、實訓項目的開發環境和所使用的技術

基于j2se基礎,利用myeclipse 8.5以上版本的集成開發環境完成實訓項目,界面友好,代碼的可維護性好,有必要的注釋和相應的文檔。

四、實訓地點、日程、分組情況:

實訓地點:4棟303機房

日 程:

第一階段:1.班級分組,選定課題,查閱相關資料 半天 2.劃分模塊、小組成員分工 半天 3.利用case工具進行系統設計和分析,并編制源程序 5天

第二階段:上機調試,修改、調試、完善系統 2天

第三階段:撰寫、上交課程設計報告,上交課程設計作品源程序(每人1份)2天

五、程序分析

功能模塊說明

彈出菜單

for(int f=0;f<4;f++) 改變字號:

public void zihao() { font f=new font(,font.plain,20); jta.setfont(f);} 設置字型

public void ziti() { font f=new font(宋體,font.plain,15); 改變字體顏色

public void font() { jcolorchooser jcolor=new jcolorchooser(); color fcolor=jta.getforeground(); jta.setforeground( jcolor.showdialog(jta,選擇字體顏色,fcolor)); } 自動換行

public void action(){ jta.setlinewrap(true);//激活自動換行功能

實現接口

public void actionperformed(actionevent e ) { 創建保存文件對話框

public void savefile() { 創建打開文件對話框

private void openfile() { jfilechooser filechoose=new jfilechooser(); int result=filechoose.showopendialog(null); if(result==jfilechooser.approve_option)

} { try{

file file=filechoose.getselectedfile(); filereader fr=new filereader(file); int len=(int)file.length(); char[] context=new char[len]; fr.read(context,0,len); fr.close(); jta.settext(new string(context)); jfilechooser filechoose=new jfilechooser(); int result=filechoose.showsavedialog(null); if(result==jfilechooser.approve_option)

} { try{

file file=filechoose.getselectedfile(); filewriter fw=new filewriter(file); fw.write(jta.gettext()); fw.close(); }catch(exception e){system.out.println(保存文件失敗!);} }else return; }catch(exception e){system.out.println(打開文件失敗!);} }else return;

六、程序設計及實現

1、實現彈出菜單(jpopupmenu)

2、設置字型,字體大小,字體顏色

3、實現自動換行

七、實訓總結

通過3天的實訓,雖然實訓的時間不長,但是總體上收獲是很大的,我們的java課程學到的只是java和皮毛,一開始我還沒有信心完成。我仔細看了書上的代碼之后。對計事本有了一個大體的了解,在初訓的實候知道自己應該做一個什么樣的計事本了,在實訓的過程中也遇到了不少困難,通過查api文檔和看書,解決了問題,在寫到字符的查找的替換時后,用到了上課時學到的知識,對字體的風格的保存里面的顏色分離和還原方法,是通過查api文檔獲得的,現在我所寫的計事本只實現在一些基本功能。簡單的復制粘貼,字體風格的設置,還有就是查找和替換功能以及一些字體風格的保存.對文件的操作基本都用到了。

在實現記事本的功能過程中,也不是很順利,基本的文件讀寫和保存文檔的復制、粘貼、刪除等功能還比較容易實現,但如何改變字體、字體顏色和背景顏色,就比較麻煩了,要實現字體顏色和背景顏色,首先要調用系統的調色板,再進行設置。但如何調用系統調色板?我是通過查閱幫助文檔來找到其調用方法的。像自動換行、設置字體等都是通過方法來調用,給相關事件加上監聽,在進行響應事件。整個程序中方法才是最關鍵的,也是最困難的。所以像查找、替換、轉到幾個功能我都不知道用什么方法,也由于時間有限,沒有完成其功能。 總體的感覺是對java有了一個全新的認識,現在感覺用java做小的圖形用戶程序有些缺陷,但是在其的應用方面。尤其是有網絡方面的應用,在整個實訓我也嘗試過做一個小的畫圖軟件。但是由于時間關系還有一個是自身的知識的欠缺,最終這個事情被擱淺下來了。最后還是進行計事本的編寫。由于在做畫圖軟件時花了不了時間,所以現在的計事本的功能不是很全,如果有更多的時間,我會把這個記事體再完善一下,再把畫圖軟件也做出來。實訓的時間不長,但是我會在課外把它們的功能完善。然后再學習一下java和網絡的編程,體驗java的前沿技術。

在學習的過程中也體會到,遇到問題也要請教。不然的話自己一個人去做的話會花很多的時間,我在做這個記事本的時間,其中也問到過許多問題,通過同學的幫助下解決了,提高了程序的開發進程。其他的同學有問題的話我也是給他們盡量解決。我認為學習知識的過程當中就應該是相互學習相互進步的。

雖然學習java的路還很找,但我會繼續走下去。

第二篇:JAVA實驗報告 心得體會——密碼攻擊、遺傳算法

JAVA實驗報告

JAVA實驗報告

一、 JAVA編程模擬密碼攻擊MimaGongji 1. 模擬密碼攻擊MimaGongji功能需求分析

編程模擬密碼攻擊的過程,實現下述功能:

(1)鍵盤輸入12位密碼,包括字母和數字;

(2)采用窮舉法進行攻擊,直到破解密碼為止;

(3)屏幕輸出試驗的次數,并輸出獲得的密碼。

2. MimaGongji基本設計思路

1) 基于對MimaGongji功能需求的分析,MimaGongji這個類作為主類,實現主要功能,包括密碼的流輸入,密碼的窮舉法破解和破解后密碼的輸出。 2) Java.io.*這個包主要實現數據的流輸入和流輸出。

3) public static void main(String[] args)這個方法是主要的方法,實現密碼的鍵盤輸入,采用窮舉法進行攻擊,并屏幕輸出試驗的次數和獲得的密碼。 4) .length()這個方法主要是計算一個字符串的長度

3. 實驗步驟

1) Java程序代碼(*.java)和詳細的行注釋 //文件名稱為“MimaGongji.java” import java.io.*; //加入java的流輸入和流輸出包 class MimaGongji //定義主類 {

public static void main(String[] args)//引入主要方法 {

String s=""; try{ BufferedReader

mima=

new

BufferedReader(new InputStreamReader(System.in)); //定義密碼的流輸入

- 1

JAVA實驗報告

//統計試驗的次數

}

System.out.print(po);

} //輸出破解之后的密碼

} System.out.println();//換行 System.out.println("試驗次數:"+g); //輸出提示“試驗的次數”

} }//類申明的結束

2)程序的運行(包括運行的過程、界面和結果圖)

首先編寫如上所示的源程序,保存文件名稱為“MimaGongji.java”,然后編譯源程序,編譯完成后,生成一個字節碼文件MimaGongji.class,執行這個程序,得到如下圖所示的窗口:

- 345

JAVA實驗報告

getContentPane().add(pb,BorderLayout.SOUTH);//把面板添加到窗口上

t1=new JTextField(50); //創建文本框

t2=new JTextField(50); //創建文本框

t3=new JTextField(50); //創建文本框 t4=new JTextField(5); //創建文本框 t5=new JTextField(5); //創建文本框 t6=new JTextField(5); //創建文本框

t2.setEditable(false); //定義文本框的不可書寫

t4.setEditable(false); //定義文本框的不可書寫

t5.setEditable(false); //定義文本框的不可書寫

t6.setEditable(false); //定義文本框的不可書寫

p.add(l3,BorderLayout.NORTH); //把標簽添加到面板上 p.add(t3,BorderLayout.CENTER); //把文本框添加到面板上 p.add(l1,BorderLayout.NORTH); //把標簽添加到面板上 p.add(t1,BorderLayout.CENTER); //把文本框添加到面板上 p.add(l2,BorderLayout.NORTH); //把標簽添加到面板上 p.add(t2,BorderLayout.CENTER); //把文本框添加到面板上 p.add(l4,BorderLayout.NORTH); //把標簽添加到面板上 p.add(t4,BorderLayout.CENTER); //把文本框添加到面板上 p.add(l5,BorderLayout.NORTH); //把標簽添加到面板上 p.add(t5,BorderLayout.CENTER); //把文本框添加到面板上 p.add(l6,BorderLayout.NORTH); //把標簽添加到面板上 p.add(t6,BorderLayout.CENTER); //把文本框添加到面板上 b0=new JButton("生成父母基因"); //創建父母基因生成按鈕 pb.add(b0); //添加到面板上

b1=new JButton("100次交叉、變異"); //創建交叉、變異按鈕 pb.add(b1); //添加到面板上 b2=new JButton("200次交叉、變異"); pb.add(b2); b3=new JButton("500次交叉、變異");

- 7

JAVA實驗報告

Object s=e.getSource(); if(s==b0) //監聽器實現功能 {

t3.setText(s1); //t3文本框輸出s1

} t1.setText(s2); t4.setText(String.valueOf(H1)); t5.setText(String.valueOf(H2));

if(s==b1)time(100); //監聽器實現功能

} if(s==b2)time(200); if(s==b3)time(500);

public void time(int r) //定義方法,實現函數的調用

{

int x,y,z,d1=0,d2=0,w,k,H3=0;

c=new int[23]; //定義一個數組

for(int j=1;j<=r;j++) //基因的交叉 {

x=1+(int)(Math.random()*23); //生成一個隨機父親基因位

y=1+(int)(Math.random()*23); //生成一個隨機母親基因位

z=f[x-1];f[x-1]=m[y-1];m[y-1]=z; //兩個基因位的基因調換 }

for(int j=0;j<23;j++) //分別計算父母基因總和

{

d1+=f[j];

- 9

JAVA實驗報告

2)程序的運行(包括運行的過程、界面和結果圖)

首先編寫如上所示的源程序,保存文件名稱為“YichuanSuanfa.java”,然后編譯源程序,編譯完成后,生成一個字節碼文件YichuanSuanfa.class,執行這個程序,得到如下圖所示的窗口:

隨機生成父母基因,得到如下圖示:

- 11

JAVA實驗報告

500次交叉、變異之后,得到如下圖示:

4.實驗心得

.java文件名要與主類名相同,JAVA對字

1.編寫調試程序要注意程序編寫的規則,母的大小寫特別敏感,輸入時要特捏注意大小寫字母的定義,千萬別犯主類名與.java文件名不同的錯誤。

2.在做圖形界面時,注意設置圖形界面的大小以及文本框、標簽和按鈕的位置。創建文本框的時候,可以設置文本框的可寫性,以及文本框的顏色等等。在隨機生成父母基因的時候,注意生成的隨機數是什么范圍,我們實驗要求的范圍是什么。監聽器的響應,在文本框中輸出的是一個基因整體還是一個數,都需要注意,因為這兩種輸出的方法不同。

3.為了簡化程序,我們應該學會調用函數的方法。一開始做程序的時候,我沒有注意到這一點,導致我的程序代碼非常繁雜,而且容易出錯。在同學的建議下,我把100次、200次、500次交叉、變異的實現使用調用函數的方法,這樣我的程序代碼變得簡明多了。因此,在做程序的時候應該考慮到程序代碼的簡明扼要,不但美觀,還能保證

JAVA實驗報告

正確性的要求。

4.特別要注意的是一個變量的使用范圍,在同一個方法中,同一變量是可以通用的,即不用重復定義,可以被系統認識,在不同的方法之間,同一變量是不能被對方所認識的,這就需要我們在定義變量時,注意變量的使用范圍,如果需要在不同的方法中被引用,那就需要我們在所有的方法之外,同一類中進行定義。

第三篇:JAVA實驗報告

河北北方學院信息科學與工程學院

《Java程序設計》

實 驗 報 告

實驗學期 2014 至 2015 學年 第 2 學期

學生所在系部 信息科學與工程學院 年級 2012 專業班級 電子三班 學生姓名 馮洋 學號 201242220 任課教師 實驗成績

實驗七 GUI標準組件及事件處理

一、課程設計目的: 《面向對象程序設計》是一門實踐性很強的計算機專業基礎課程,課程設計是學習完該課程后進行的一次較全面的綜合練習。其目的在于通過實踐加深學生對面向對象程序設計的理論、方法和基礎知識的理解,掌握使用Java語言進行面向對象設計的基本方法,提高運用面向對象知識分析實際問題、解決實際問題的能力,提高學生的應用能力。

二、實驗要求:

設計一個簡單的文本編輯器,具有如下基本功能: 1)所見即所得的文本輸入;

2)能方便地選中文本、復制、刪除和插入文本; 3)具有一般編輯器所具有的查找和替換功能;

4)簡單的排版,如設置字體和字號等。

三、課程設計說明:

1、需求分析:簡單文本編輯器提供給用戶基本的純文本編輯功能,能夠將用戶錄入的文本存儲到本地磁盤中。能夠讀取磁盤中現有的純文本文件,以及方便用戶進行需要的編輯功能。文件操作能夠實現新建、保存、打開文檔等,編輯操作能過實現文本的剪貼、復制、粘貼等,格式操作能過實現字體設置、背景等,幫助操作能夠實現關于主題的查看等功能

2、概要設計:

(一)其基本功能包括:

① 基本的文本操作功能。包括新建,保存,打開,保存。

② 基本的編輯功能。包括復制,剪貼,粘貼。 ③ 基本的格式功能,字體。 ④ 簡單的幫助,關于主題。

(二)主要的組件包括:

① 基本的Frame框架; ② 菜單;

③ 打開文件對話框; ④ 保存文件對話框; ⑤ 顏色對話框; ⑥ 簡單的幫助框架。

3、程序說明:

整個記事本分成:Jframe程序主體框架,Jmenu菜單欄、JtextArea文本輸入區、PopupMenu右鍵菜單、JscrollPane滾動條、FonDialog字體類等。

本程序中首先定義一個Java Yang類繼承JFrame作為最底層容器。 要想記事本完成需求分析中相應的功能,還必須添加事件監聽器。事件監聽器不僅要添加在菜單欄和內容輸入區,還需加在容器中。本程序中ActListener實現了ActionListener接口,用來監聽并處理所有菜單項和內容輸入區為事件源的事件。 另外,還用來WindowListener來監聽處理容器關閉觸發的事件,WindowListener繼承了WindowsAdapter類并覆蓋了WindowsClosing方法。

四、程序調試:

1、調試分析:

(1)關于打開、保存和退出我運用了文件對話框, openFileDialog、saveFileDialog和System.exit()以及文件輸入輸出流來實現,新建功能我選用了 textArea.setText()方法. (2)對于剪貼,粘貼,復制的實現則用 復制

String text = textArea.getSelectedText(); StringSelection selection= new StringSelection(text); clipboard.setContents(selection,null); 粘貼

Transferable contents = clipboard.getContents(this); if(contents==null) return; String text; text=""; try { text = (String)contents.getTransferData(DataFlavor.stringFlavor); } catch(Exception ex) { } textArea.replaceRange(text,textArea.getSelectionStart(),textArea.getSelectionEnd()); (3)至于字體功能的實現,則是新建了一個字體類,在這個類中設置了字形,字體以及大小并且有字體樣式可預覽用戶當前的設置。FlowLayout()設置布局,setSize()設置大小add()添加需要用的原件。

添加監聽器獲取選擇用戶的字號大小

public void itemStateChanged(ItemEvent event) { size = (new Integer((String) event.getItem()).intValue()); setCustomFont(new Font(name, type, size));} 設置字體

private void setCustomFont(Font customFont) { this.customFont = customFont; area.setFont(customFont); area.revalidate();} 獲取字體

public Font getCustomFont() { return (this.customFont);}

附錄:源代碼

//記事本主體類 import java.awt.event.*; import java.awt.*; import java.io.*; import java.awt.datatransfer.*; import javax.swing.*;

import java.awt.print.PrinterException;

public class MiniNote extends JFrame implements ActionListener {

JMenuBar menuBar = new JMenuBar(); JMenu file = new JMenu("文件(F)"), //菜單 edit = new JMenu("編輯(E)"), format = new JMenu("格式(O)"), view = new JMenu("查看(V)"), help = new JMenu("幫助(H)");

JMenuItem[] menuItem ={ //菜單下拉項 new JMenuItem("新建(N)"), new JMenuItem("打開(O)"), new JMenuItem("保存(S)"), new JMenuItem("打印(P)"), new JMenuItem("全選(A)"), new JMenuItem("復制(C)"), new JMenuItem("剪切(T)"), new JMenuItem("粘貼(P)"), new JMenuItem("自動換行(W)"), new JMenuItem("字體(F)"), new JMenuItem("狀態欄(S)"), new JMenuItem("幫助主題(H)"), new JMenuItem("關于記事本(A)"), new JMenuItem("頁面設置(U)"), new JMenuItem("退出(X)"), new JMenuItem("查找(F)"), new JMenuItem("查找下一個(N)"), new JMenuItem("替換(R)") };

JPopupMenu popupMenu = new JPopupMenu(); ;//右鍵菜單 JMenuItem [] menuItem1 ={ new JMenuItem("撤銷(Z)"), new JMenuItem("剪切(X)"), new JMenuItem("復制(C)"), new JMenuItem("粘貼(V)"), new JMenuItem("刪除(D)"), new JMenuItem("全選(A)"), };

private JTextArea textArea ; //文本區域 private JScrollPane js ; //滾動條 private JPanel jp ; private FileDialog openFileDialog ; //打開保存對話框 private FileDialog saveFileDialog ; private Toolkit toolKit; //獲取默認工具包。 private Clipboard clipboard; //獲取系統剪切板 private String fileName; //設置默認的文件名

/** * MiniEdit 方法定義 * * 實現記事本初始化 * **/ public MiniNote() {

fileName = "無標題"; toolKit = Toolkit.getDefaultToolkit(); clipboard = toolKit.getSystemClipboard(); textArea =new JTextArea(); js = new JScrollPane(textArea); jp = new JPanel(); openFileDialog = new FileDialog(this,"打開",FileDialog.LOAD); saveFileDialog = new FileDialog(this,"另存為",FileDialog.SAVE);

js.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); jp.setLayout(new GridLayout(1,1)); jp.add(js); textArea.setComponentPopupMenu(popupMenu); //文本區域添加右鍵 textArea.add(popupMenu); add(jp); setTitle("迷你記事本"); setFont(new Font("Times New Roman",Font.PLAIN,15)); setBackground(Color.white); setSize(800,600); setJMenuBar(menuBar); menuBar.add(file); menuBar.add(edit); menuBar.add(format); menuBar.add(view); menuBar.add(help); for(int i=0;i<4;i++) { file.add(menuItem[i]); edit.add(menuItem[i+4]); } for(int i=0;i<3;++i) { edit.add(menuItem[i+15]); } for(int i=0;i<2;++i) { format.add(menuItem[i+8]); help.add(menuItem[i+11]); } view.add(menuItem[10]); file.add(menuItem[14]); for(int i=0; i<6;++i) { popupMenu.add(menuItem1[i]); }

//窗口監聽

addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ e.getWindow().dispose(); System.exit(0); } }); //注冊各個菜單項的事件監聽器

for(int i=0;i

Object eventSource = e.getSource(); if(eventSource == menuItem[0]) //新建動作 { textArea.setText(""); } else if(eventSource == menuItem[1])//打開動作 { openFileDialog.setVisible(true); fileName = openFileDialog.getDirectory()+openFileDialog.getFile(); if(fileName != null) { openFile(fileName); } } else if(eventSource ==menuItem[2])//保存動作 { saveFileDialog.setVisible(true); fileName = saveFileDialog.getDirectory()+saveFileDialog.getFile(); if(fileName !=null) { writeFile(fileName); } } else if(eventSource==menuItem[14])//退出動作 { System.exit(0); } else if(eventSource == menuItem[4]||eventSource == menuItem1[5]) //全選動作 { textArea.selectAll(); } else if(eventSource == menuItem[5]||eventSource == menuItem1[2]) //復制動作 { String text = textArea.getSelectedText(); StringSelection selection= new StringSelection(text); clipboard.setContents(selection,null); } else if(eventSource == menuItem[6]||eventSource == menuItem1[1])//剪切動作 { String text = textArea.getSelectedText(); StringSelection selection = new StringSelection(text); clipboard.setContents(selection,null); textArea.replaceRange("", textArea.getSelectionStart(), textArea.getSelectionEnd()); }

else if(eventSource == menuItem[7]||eventSource == menuItem1[3])//粘貼動作 { Transferable contents = clipboard.getContents(this); if(contents==null) return; String text; text=""; try { text = (String)contents.getTransferData(DataFlavor.stringFlavor); } catch(Exception ex) {

} textArea.replaceRange(text, textArea.getSelectionStart(),textArea.getSelectionEnd()); } else if(eventSource == menuItem[8]) //自動換行 { if (textArea.getLineWrap()) textArea.setLineWrap(false); else textArea.setLineWrap(true);

} else if(eventSource == menuItem[9]) //字體 {//實例化字體類

FontDialog fontdialog = new FontDialog(new JFrame(),"字體",true); textArea.setFont(fontdialog.showFontDialog()); //設置字體 }

else if(eventSource == menuItem[11]) //幫助 { try { String filePath = "C:/WINDOWS/Help/notepad.hlp"; Runtime.getRuntime().exec("cmd.exe /c "+filePath); } catch(Exception ee) { JOptionPane.showMessageDialog(this,"打開系統的記事本幫助文件出錯!","錯誤信息",JOptionPane.INFORMATION_MESSAGE); } } else if(eventSource == menuItem[12]) //關于記事本 { String help = "記事本 版本1.0 操作系統:WIN 8 編譯器:eclipse 版權" + "所有: ESTON YANG 最終解釋權歸本人所有" + "" + " Build By 馮洋" + " 課程設計:JAVA"; JOptionPane.showConfirmDialog(null, help, "關于記事本", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE);

} else if(eventSource == menuItem[15]||eventSource == menuItem[16]) //查找下一個 { search();

} else if(eventSource == menuItem[17]) //替換 { substitude(); } else if(eventSource == menuItem[3]) //打印 { try { textArea.print(); } catch (PrinterException e1) { e1.printStackTrace(); }

} } /** * openFile方法 * * 從TXT讀進數據到記事本 * **/ public void openFile(String fileName){

try {

File file = new File(fileName); FileReader readIn = new FileReader(file); int size = (int)file.length(); int charsRead = 0; char[] content = new char[size]; while(readIn.ready()) { charsRead += readIn.read(content,charsRead,size-charsRead); } readIn.close(); textArea.setText(new String(content,0,charsRead)); } catch(Exception e) { System.out.println("Error opening file!"); } } /** * saveFile方法 * * 從記事本寫進數據到TXT * **/ public void writeFile(String fileName){ try { File file = new File(fileName); FileWriter write = new FileWriter(file); write.write(textArea.getText()); write.close(); } catch(Exception e) { System.out.println("Error closing file!"); } } /** * substitude方法 * * 實現替換功能 * */ public void substitude() {

final JDialog findDialog = new JDialog(this, "查找與替換", true); Container con = findDialog.getContentPane(); con.setLayout(new FlowLayout(FlowLayout.LEFT)); JLabel searchContentLabel = new JLabel("查找內容(N) :"); JLabel replaceContentLabel = new JLabel("替換為(P) :"); final JTextField findText = new JTextField(30); final JTextField replaceText = new JTextField(30); final JCheckBox matchcase = new JCheckBox("區分大小寫(C)"); ButtonGroup bGroup = new ButtonGroup(); final JRadioButton up = new JRadioButton("向上(U)"); final JRadioButton down = new JRadioButton("向下(D)"); down.setSelected(true); //默認向下搜索

bGroup.add(up); bGroup.add(down);

JButton searchNext = new JButton("查找下一個(F)"); JButton replace = new JButton("替換(R)"); final JButton replaceAll = new JButton("全部替換(A)");

//"替換"按鈕的事件處理

replace.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (replaceText.getText().length() == 0 && textArea.getSelectedText() != null)

textArea.replaceSelection(""); if (replaceText.getText().length() > 0 && textArea.getSelectedText() != null)

textArea.replaceSelection(replaceText.getText()); } });

//"替換全部"按鈕的事件處理

replaceAll.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { textArea.setCaretPosition(0); //將光標放到編輯區開頭 int a = 0, b = 0, replaceCount = 0; if (findText.getText().length() == 0) { JOptionPane.showMessageDialog(findDialog, "請填寫查找內容!", "提示",JOptionPane.WARNING_MESSAGE); findText.requestFocus(true); return; } while (a > -1) { int FindStartPos = textArea.getCaretPosition();//獲取光標位置

String str1, str2, str3, str4, strA, strB; str1 = textArea.getText(); str2 = str1.toLowerCase(); str3 = findText.getText(); str4 = str3.toLowerCase(); if (matchcase.isSelected()) //大小寫區分 { strA = str1; strB = str3; } else { strA = str2; strB = str4; }

if (up.isSelected()) //向上搜索

{ if (textArea.getSelectedText() == null) { a = strA.lastIndexOf(strB, FindStartPos1); } } else //向下搜索

{ if (textArea.getSelectedText() == null) { a = strA.indexOf(strB, FindStartPos);

} else { a = strA.indexOf(strB, FindStartPos- findText.getText().length() + 1); } }

if (a > -1) { if (up.isSelected()) {

textArea.setCaretPosition(a); b = findText.getText().length(); textArea.select(a, a + b); } else if (down.isSelected()) {

textArea.setCaretPosition(a); b = findText.getText().length(); textArea.select(a, a + b); } } else { if (replaceCount == 0) { JOptionPane.showMessageDialog(findDialog,"找不到您查找的內容!", "記事本",JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(findDialog, "成功替換"+ replaceCount + "個匹配內容!", "替換成功",JOptionPane.INFORMATION_MESSAGE); } } if (replaceText.getText().length() == 0&& textArea.getSelectedText() != null) //用空字符代替選定內容

{

textArea.replaceSelection(""); replaceCount++; } if (replaceText.getText().length() > 0&& textArea.getSelectedText() != null) //用指定字符代替選定內容 {

textArea.replaceSelection(replaceText.getText()); replaceCount++; } }//end while } });

//"查找下一個"按鈕事件處理

searchNext.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) { int a = 0, b = 0; int FindStartPos = textArea.getCaretPosition(); String str1, str2, str3, str4, strA, strB; str1 = textArea.getText(); str2 = str1.toLowerCase(); str3 = findText.getText(); str4 = str3.toLowerCase();

//"區分大小寫"的CheckBox被選中

if (matchcase.isSelected()) //區分大小寫

{ strA = str1; strB = str3; } else //不區分大小寫 { strA = str2; strB = str4; } if (up.isSelected()) //向上搜索

{ if (textArea.getSelectedText() == null) {

a = strA.lastIndexOf(strB, FindStartPosfindText.getText().length()findText.getText().length() + 1); } } if (a > -1) { if (up.isSelected()) {

textArea.setCaretPosition(a); b = findText.getText().length(); textArea.select(a, a + b); } else if (down.isSelected()) {

textArea.setCaretPosition(a); b = findText.getText().length(); textArea.select(a, a + b); } } else { JOptionPane.showMessageDialog(null, "找不到您查找的內容!", "記事本", JOptionPane.INFORMATION_MESSAGE); } } });

//"取消"按鈕及事件處理

JButton cancel = new JButton("取消"); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { findDialog.dispose(); } }); //創建"查找與替換"對話框的界面

JPanel bottomPanel = new JPanel(); JPanel centerPanel = new JPanel(); JPanel topPanel = new JPanel(); JPanel direction = new JPanel();

direction.setBorder(BorderFactory.createTitledBorder("方向")); direction.add(up); direction.add(down);

JPanel replacePanel = new JPanel(); replacePanel.setLayout(new GridLayout(1, 2)); replacePanel.add(searchNext); replacePanel.add(replace); replacePanel.add(replaceAll); replacePanel.add(cancel);

topPanel.add(searchContentLabel); topPanel.add(findText);

centerPanel.add(replaceContentLabel); centerPanel.add(replaceText); centerPanel.add(replacePanel);

bottomPanel.add(matchcase); bottomPanel.add(direction);

con.add(replacePanel); con.add(topPanel); con.add(centerPanel); con.add(bottomPanel);

//設置"查找與替換"對話框的大小、可更改大小(否)、位置和可見性

findDialog.setSize(550, 240); findDialog.setResizable(true); findDialog.setLocation(230, 280); findDialog.setVisible(true); }//方法mySearch()結束 /** * search方法 * * 實現查找功能 * */ public void search() {

final JDialog findDialog = new JDialog(this, "查找下一個", true); Container con = findDialog.getContentPane(); con.setLayout(new FlowLayout(FlowLayout.LEFT)); JLabel searchContentLabel = new JLabel(" 查找內容(N) :");

final JTextField findText = new JTextField(17); final JCheckBox matchcase = new JCheckBox("區分大小寫(C)"); ButtonGroup bGroup = new ButtonGroup(); final JRadioButton up = new JRadioButton("向上(U)"); final JRadioButton down = new JRadioButton("向下(D)"); down.setSelected(true); //默認向下搜索

bGroup.add(up); bGroup.add(down);

JButton searchNext = new JButton("查找下一個(F)");

//"查找下一個"按鈕事件處理

searchNext.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) { int a = 0, b = 0; int FindStartPos = textArea.getCaretPosition(); String str1, str2, str3, str4, strA, strB; str1 = textArea.getText(); str2 = str1.toLowerCase(); str3 = findText.getText(); str4 = str3.toLowerCase();

//"區分大小寫"的CheckBox被選中

if (matchcase.isSelected()) //不區分大小寫

{ strA = str1; strB = str3; } else //區分大小寫 { strA = str2; strB = str4; } if (up.isSelected()) //向上搜索

{ if (textArea.getSelectedText() == null) {

a = strA.lastIndexOf(strB, FindStartPosfindText.getText().length()findText.getText().length() + 1); } } if (a > -1) { if (up.isSelected()) {

textArea.setCaretPosition(a); b = findText.getText().length(); textArea.select(a, a + b); } else if (down.isSelected()) {

textArea.setCaretPosition(a); b = findText.getText().length(); textArea.select(a, a + b); } } else { JOptionPane.showMessageDialog(null, "找不到您查找的內容!", "記事本", JOptionPane.INFORMATION_MESSAGE); } } });

//"取消"按鈕及事件處理

JButton cancel = new JButton(" 取消 "); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { findDialog.dispose(); } }); //創建"替換"對話框的界面

JPanel bottomPanel = new JPanel(); JPanel centerPanel = new JPanel(); JPanel topPanel = new JPanel(); JPanel direction = new JPanel(); direction.setBorder(BorderFactory.createTitledBorder("方向")); direction.add(up); direction.add(down); topPanel.add(searchContentLabel); topPanel.add(findText); topPanel.add(searchNext); bottomPanel.add(matchcase); bottomPanel.add(direction); bottomPanel.add(cancel); con.add(topPanel); con.add(centerPanel); con.add(bottomPanel); //設置"替換"對話框的大小、可更改大小(否)、位置和可見性

findDialog.setSize(425, 200); findDialog.setResizable(true); findDialog.setLocation(230, 280); findDialog.setVisible(true); }

/** * 主函數 * * * **/ public static void main(String[] args) {

MiniNote note = new MiniNote(); note.setVisible(true); }

} //字體類

import java.awt.Font; import java.awt.GraphicsEnvironment; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.border.*; import java.util.*; public class FontDialog {

private Dialog fontdialog; private JButton okButton, cancelButton; private int width = 480; private int height = 250; private String name = "Serif"; private int type = 0; private int size = 12; private Font customFont = new Font("宋體", Font.ITALIC, 12); private boolean okpressed = false; private boolean cancelpressed = false; private JLabel lbl1 = new JLabel("字體:"); private JLabel lbl2 = new JLabel("字形:"); private JLabel lbl3 = new JLabel("大?。?quot;); private JTextArea area; String[] zx = { "常規", "加粗", "斜體", "基線" }; String[] dx = {"8" , "9" , "10", "12", "14", "15", "16", "18",

"20", "21", "22", "24", "26", "28", "30", "36",

"48", "54","72" , "89"}; JLabel lbl = new JLabel("字體樣式Style"); private JComboBox cb1, cb3 = new JComboBox(dx), cb2 = new JComboBox(zx); private String[] zt;

public FontDialog(Frame owner, String title, boolean modal) {

init(); fontdialog = new Dialog(owner, title, modal); fontdialog.setLocation(owner.getLocation()); fontdialog.setLayout(new FlowLayout()); fontdialog.setSize(getWidth(), getHeight()); fontdialog.add(lbl1); fontdialog.add(cb1); fontdialog.add(lbl2); fontdialog.add(cb2); fontdialog.add(lbl3); fontdialog.add(cb3); fontdialog.add(okButton); fontdialog.add(cancelButton); fontdialog.add(area); fontdialog.setResizable(false); fontdialog.setAlwaysOnTop(true); cancelButton.addActionListener(new fontListener()); okButton.addActionListener(new fontListener()); fontdialog.addWindowListener(new fontListener());

cb1.addItemListener(new ItemListener() { // public void itemStateChanged(ItemEvent event) { //獲取選擇用戶的字體類型

name = (String) event.getItem(); setCustomFont(new Font(name, type, size)); } });

cb2.addItemListener(new ItemListener() { // public void itemStateChanged(ItemEvent event) { //獲取選擇用戶的字形

String s = (String) event.getItem(); if (s.equals("常規")) { type = Font.PLAIN; setCustomFont(new Font(name, type, size)); } else if (s.equals("加粗")) { type = Font.BOLD;

字體動作 添加監聽器字形動作 添加監聽器 setCustomFont(new Font(name, type, size)); } else if (s.equals("斜體")) { type = Font.ITALIC; setCustomFont(new Font(name, type, size)); } else { type = Font.CENTER_BASELINE; setCustomFont(new Font(name, type, size)); } } });

cb3.addItemListener(new ItemListener() { //大小動作 public void itemStateChanged(ItemEvent event) { //添加監聽器獲取選擇用戶的字號大小

size = (new Integer((String) event.getItem()).intValue()); setCustomFont(new Font(name, type, size)); } });

}

public Font showFontDialog() { fontdialog.setVisible(true); if (okpressed) { return getCustomFont(); } else { return customFont; } }

private void init() { //初始化 okButton = new JButton("確定"); cancelButton = new JButton("取消"); GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); zt = ge.getAvailableFontFamilyNames(); cb1 = new JComboBox(zt); cb1.setMaximumRowCount(6); area = new JTextArea(6, 30); cb3 = new JComboBox(dx); cb3.setMaximumRowCount(6); okButton.setFocusable(true); area.setEditable(false); area.setText(new Date().toString()); area.setBorder(new TitledBorder("字體樣式")); }

public void setWidth(int width) { this.width = width; }

public void setHeight(int height) { this.height = height; }

private int getWidth() { return (this.width); }

private int getHeight() { return (this.height); }

private void setCustomFont(Font customFont) //{ this.customFont = customFont; area.setFont(customFont); area.revalidate(); }

public String toString() { return FontDialog.class.toString(); }

設置字體 public Font getCustomFont() //獲取字體 { return (this.customFont); }

private class fontListener extends WindowAdapter implements ActionListener //監聽事件類 { public void windowClosing(WindowEvent e) { fontdialog.dispose(); }

public void actionPerformed(ActionEvent e) { if (e.getSource() == cancelButton) { fontdialog.dispose(); cancelpressed = true; } else if (e.getSource() == okButton) { okpressed = true; setCustomFont(new Font(name, type, size)); fontdialog.dispose(); } } } }

第四篇:java實驗報告4

實驗項目名稱:實驗4 基于Socket的網絡編程

【實驗目的】

1、 理解Java的基于套接字的網絡通信原理。

2、 理解客戶端和服務器的概念。

3、 學習使用套接字實現客戶端和服務器通信的程序設計方法。

【實驗任務】

使用Java的Socket(套接字)技術和多線程技術,開發一個分布式井字游戲。允許2個用戶在因特網上任意不同的計算機上相互對弈。

【上機步驟】(含基本步驟,主要程序結果及異常情況記錄等)

1. 新建類“test41”,新建接口“TicTacToeConstants”,分別如下代碼:

4.運行結果如下:

【實驗總結】(實驗后的心得體會、建議等)

第五篇:Java EE實驗報告

學 生 實 驗 報 告

課程名稱:

學生學號:

所屬院部:

(理工類)

J2EE程序設計 專業班級:

學生姓名:

信息技術學院 指導教師:

20 13 ——20 14 學年 第 2 學期

金陵科技學院教務處制 實驗報告書寫要求

實驗報告原則上要求學生手寫,要求書寫工整。若因課程特點需打印的,要遵照以下字體、字號、間距等的具體要求。紙張一律采用A4的紙張。

實驗報告書寫說明

實驗報告中一至四項內容為必填項,包括實驗目的和要求;實驗儀器和設備;實驗內容與過程;實驗結果與分析。各院部可根據學科特點和實驗具體要求增加項目。

填寫注意事項

(1)細致觀察,及時、準確、如實記錄。 (2)準確說明,層次清晰。

(3)盡量采用專用術語來說明事物。

(4)外文、符號、公式要準確,應使用統一規定的名詞和符號。 (5)應獨立完成實驗報告的書寫,嚴禁抄襲、復印,一經發現,以零分論處。

實驗報告批改說明

實驗報告的批改要及時、認真、仔細,一律用紅色筆批改。實驗報告的批改成績采用百分制,具體評分標準由各院部自行制定。

實驗報告裝訂要求

實驗批改完畢后,任課老師將每門課程的每個實驗項目的實驗報告以自然班為單位、按學號升序排列,裝訂成冊,并附上一份該門課程的實驗大綱。

實驗項目名稱:Java編程基礎 實驗學時: 4 同組學生姓名: ———— 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:

一、實驗目的和要求

(1) 熟練掌握JDK1.7及Eclipse Kepler Service Release 1(下簡稱Eclipse)編寫調試Java應用程序的方法;

(2) 熟練掌握Java常用工具類的使用; (3) 熟練掌握Java集合框架編程;

(4) 調試程序要記錄調試過程中出現的問題及解決辦法;

(5) 編寫程序要規范、正確,上機調試過程和結果要有記錄,不斷積累編程及調試經驗; (6) 做完實驗后給出本實驗的實驗報告。

二、實驗儀器和設備

奔4以上計算機,Windows 操作系統,裝有JDK1.7和Eclipse軟件。

三、實驗內容及過程

(1) 設計一個類Student,類的屬性有:姓名,學號,出生日期,性別,所在系等。并生成學生類對象數組,按照學生的姓名將學生排序輸出。(注意:使用String類的compareTo方法)

(2) 使用日歷類等相關方法,按截圖做出一個日歷。參照書本示例,研究其中代碼,回顧與復習利用Java Swing編程。

(3) 將本學期開設的課程名稱加入到HashSet中,并使用迭代器遍歷輸出。

(4) 完成以下實驗: (1) 定義一個學生類:屬性有學號、姓名、專業、高數成績、外語成績、Java課程成績。 (2) 在測試類中生成多個學生類的對象,放入TreeSet中,要求按照三門課總成績從高到低排序,總成績相等按學號排序輸出排序結果。 (注意:實現Comparator接口的compare(Object obj1,Object obj2)函數)

(5) 以List接口對象(ArrayList)為基礎建立一個通訊錄,要求通訊錄中必須含有編號、姓名,性別、電話、地址、Email等等。實現該類并包含添加、刪除、修改、按姓名查等幾個方法。編寫主程序測試。

要求:

(1) 編譯調試程序之前應配置好環境變量;

(2) 要掌握用JDK命令行和Eclipse集成開發環境調試Java程序; (3) 熟練掌握Java常用工具類和集合框架的使用;

程序清單:

(建議程序中適當添加注釋信息,增強可讀性;較長程序可分欄書寫,保證報告排版整潔美觀。)

(實驗一程序清單續1)

(實驗一程序清單續2)

四、實驗結果與分析

實驗項目名稱: JSP編程基礎 實驗學時: 6 同組學生姓名: ———— 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:

一、實驗目的和要求

(1) 熟練掌握JDOM對XML編程的使用; (2) 熟練掌握HTML編程基礎;

(3) 熟練掌握JSP環境配置以及編程基礎; (4) 熟練掌握JavaBean編程;

(5) 調試程序要記錄調試過程中出現的問題及解決辦法;

(6) 編寫程序要規范、正確,上機調試過程和結果要有記錄,不斷積累編程及調試經驗; (7) 做完實驗后給出本實驗的實驗報告。

二、實驗儀器和設備

奔4以上計算機,Windows 操作系統,裝有JDK1.7,Tomcat6.0和Eclipse軟件。

三、實驗內容及過程

(1) 通過JDOM技術實現對以下XML文件的操作:

? 顯示整個XML文件內容

? 顯示第二個客戶節點內容

? 增加一個節點:如

<客戶 性別="男"> <姓名>張三

<電子郵件>Zhangsan@magicactor.com

? 刪除客戶名稱為張三的節點

? 修改客戶名稱為張三的節點的電子郵件為Zhangsan@126.com

(2) 使用HTML與JavaScript完成一個簡單的四則運算,界面功能如下:

(3) 使用JSP與JavaBean實現一個簡易計算器.

注意:仿照(2)HTML代碼編寫網頁,使用request對象接收值,在JavaBean中計算,JSP頁面調用該JavaBean,實現數字計算。

(4) 使用application內置對象實現一個簡易的網站計數器,界面如教材P288圖15.7所示。

(5) 使用session內置對象實現一個簡易的購物車功能。利用session保存用戶選購的商品信息,本購物車程序至少包含兩個頁面:顯示商品頁面showbooks.jsp;顯示購物車頁面showcarts.jsp。

要求:

(1) 學會配置JSP編程環境;

(2) 學會使用Eclipse的各種調試方法; (3) 熟練掌握JSP的編程基礎。

程序清單:

(建議程序中適當添加注釋信息,增強可讀性;較長程序可分欄書寫,保證報告排版整潔美觀。)

(實驗二程序清單續1)

(實驗二程序清單續2)

四、實驗結果與分析

實驗項目名稱: Servlet與JSP綜合編程 實驗學時: 6 同組學生姓名: ———— 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:

一、實驗目的和要求

(1) 熟練掌握JDBC數據庫編程的使用; (2) 熟練掌握Servlet編程基礎; (3) 熟練掌握JSP綜合編程;

(4) 調試程序要記錄調試過程中出現的問題及解決辦法;

(5) 編寫程序要規范、正確,上機調試過程和結果要有記錄,不斷積累編程及調試經驗; (6) 做完實驗后給出本實驗的實驗報告。

二、實驗儀器和設備

奔4以上計算機,Windows 操作系統,裝有JDK1.7,MySQL,Tomcat6和Eclipse軟件。

三、實驗內容及過程

(1) 在數據庫中建立一個表,表名為學生,其結構為:學號、姓名、性別、年齡、成績。編程實現以下功能:

? ? ? 編寫方法向學生表中增加記錄;

編寫方法將每條記錄按成績由大到小的順序顯示到界面; 編寫方法刪除成績不及格的學生記錄。

(2) 使用JSP與JavaBean實現用戶登錄功能,要求實現以下功能:

? ? ? 創建數據庫MyDB,創建一個表Users(用戶名、密碼),用戶日志表userLog; 創建一個JavaBean;UserDao主要包含兩個函數:驗證函數、日志函數; 創建登錄頁面JSP頁面(login.jsp),構建表單Form,使用Servlet實現驗證碼功能。當用戶輸入提交后,調用JavaBean驗證其合法性,如果驗證不通過導向登錄頁面,驗證通過導向歡迎頁面。不管是否通過驗證都應該向userLog表中添加成功登錄或失敗登錄信息。; ? 創建成功頁面JSP頁面(success.jsp)。

(3) 使用JSP、Servlet以及JavaBean實現MVC架構計算圓面積,要求實現以下功能:

? ? ? 編寫JSP頁面View; 編寫JavaBean實現業務邏輯;

編寫一個Servlet,從JSP界面接收用戶輸入的半徑,調用JavaBean實現圓面積計算; ? 在web.xml文件中配置Servlet的Mapping URL。

(4) 參考書本上關于Filter的描述,編寫一個用于用戶認證的過濾器。如果管理員即后臺所有頁面都有“/admin”,如管理員登陸頁面http://localhost:8088/admin/login.jsp,要求攔截/admin的頁面進行認證(登陸界面除外),如果用戶沒有認證則跳轉到登陸頁面。 要求:

(1) 學會配置JDBC編程環境; (2) 學會使用Eclipse的各種調試方法;

(3) 熟練掌握JSP、JavaBean與Servlet綜合編程的使用。

程序清單:

(建議程序中適當添加注釋信息,增強可讀性;較長程序可分欄書寫,保證報告排版整潔美觀。)

(實驗三程序清單續1)

(實驗三程序清單續2)

(實驗三程序清單續3)

四、實驗結果與分析

實驗項目名稱: SSH框架編程 實驗學時: 8 同組學生姓名: ———— 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:

一、實驗目的和要求

(1) 熟練掌握Hibernate框架編程技術; (2) 熟練掌握Struts2框架編程技術; (3) 熟練掌握Spring框架編程技術; (4) 熟練掌握以上三種框架綜合編程技術;

(5) 調試程序要記錄調試過程中出現的問題及解決辦法;

(6) 編寫程序要規范、正確,上機調試過程和結果要有記錄,不斷積累編程及調試經驗; (7) 做完實驗后給出本實驗的實驗報告。

二、實驗儀器和設備

奔4以上計算機,Windows 操作系統,裝有JDK1.7,MySQL,Tomcat6和Eclipse軟件。

三、實驗內容及過程

(1) 使用Hibernate將顧客表中的內容輸出到JSP頁面中,要求實現以下功能:

? 將如下的數據庫腳本在MySQL中執行,數據庫為MyDB; create table customers( customerid char(8) primary key, name char(40) default null, phone char(16) default null ); ? 在項目中加入Hibernate支持并生成映射文件,映射類以及HibernateSessionFactory類。再創建一個Dao類讀取顧客表中所有記錄返回集合List; ? 編寫JSP文件。使用JSTL標簽輸出,如教材P291圖15.13所示。

(2) 使用Hibernate對多表進行關聯操作。對數據庫腳本中的職工表與部門表進行級聯操作。要求實現以下功能: ? ? 可以根據部門編號查詢部門及其查詢該部門下的所有職工信息;

刪除部門時級聯刪除部門下的所有職工??紤]當刪除部門時不想刪除該部門的職工而只將職工中的部門編號置為空,應該怎么設置。

(3) 使用Struts2實現以下用戶登陸功能:

? 完成一個用戶登錄,用戶名以及密碼為必填項。使用 Action中的validate函數進行驗證。體會Struts2基本流程; ? 當用戶輸入的用戶名不是 admin或密碼不是 12345時要求用戶重新登錄,并給出錯誤提示。當用戶填寫正確時,導向一個成功頁面顯示用戶登錄成功; ? 結合使用Hibernate將用戶信息保存到數據庫中; ? 利用Struts標簽 bean 以及logic標簽,將數據庫中的表Customer中的內容輸出,在頁面中輸出成表格,使用Hibernate讀寫數據庫。

(4) Struts國際化試驗,改造上述實驗。當用戶名或密碼未輸入,在中文環境下顯示中文,在英文環境下顯示英文錯誤信息。注意:編寫兩個資源文件。

(5) 編寫圖形接口Shape,該接口中有抽象函數計算面積double area();編寫圓類Circle與矩形類Rectange實現該接口。再編寫一個ShapeDao類,將Shape接口作為其屬性。通過Spring配置JavaBean,實現Bean的動態注入。即只需改變注入的Bean就可以計算不同圖形的面積。

(6) 完成網上成績錄入系統綜合實驗。實驗要求讀取數據庫中學生表、課程表和選課表中的內容,動態形成表單;教師可以登陸系統錄入學生成績。其中總評成績=平時成績*30% +期末成績*70%,各項成績為百分制。 ? 教師登陸界面;

圖14.16 教師登陸界面參考

? 登陸成功后選擇所要錄入的課程;

圖14.17 教師選擇課程界面參考

? 錄入成績界面;

圖14.18 教師錄入成績界面參考 ? 點擊“保存成績”,則向數據庫中寫入輸入的成績。 要求:

(1) 學會SSH框架編程環境;

(2) 學會使用Eclipse的各種調試方法;

(3) 熟練掌握Hibernate、Struts與Spring綜合編程的使用。

程序清單:

(建議程序中適當添加注釋信息,增強可讀性;較長程序可分欄書寫,保證報告排版整潔美觀。)

(實驗四程序清單續1)

(實驗四程序清單續2)

四、實驗結果與分析

本文來自 99學術網(www.gaojutz.com),轉載請保留網址和出處

上一篇:分公司2019年工作計劃下一篇:高考英語b6u5一輪復習

91尤物免费视频-97这里有精品视频-99久久婷婷国产综合亚洲-国产91精品老熟女泄火