java課程設計-- 打字速度測試程序_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  11信計2012-2013(二)</p><p>  《Java程序設計》課程設計</p><p>  設計題目 打字速度測試程序 </p><p>  設計時間  2013.6.24 至 2013.6.29 </p><p>  學生姓名 

2、 </p><p>  學生學號 </p><p>  所在班級  </p><p>  指導教師  </p><p><b>  摘要</b><

3、;/p><p>  二十世紀后半期,計算機取得了飛速的發(fā)展。現(xiàn)在,隨著網(wǎng)絡技術的發(fā)展,計算機已經(jīng)成為人們生活中不可或缺的一部分。但是很多人對于計算機的操作能力及認知極為匱乏,因此提高人們對計算機的了解以及操作能力已經(jīng)非常重要。而打字速度是用來衡量一個人操作熟練程度的一個重要方面。當前打字軟件的市場已經(jīng)達到了一定的高度,本軟件設計開發(fā)的方式是僅僅是簡單的使用戶能夠測試自己的打字速度與正確率。 本軟件使用的開發(fā)工具是J

4、AVA,它是當前比較流行的開發(fā)工具。在構造圖形及其處理方面具有很強的優(yōu)勢,能夠為用戶構造一個比較美觀的打字測試界面,并且能夠很好的測試您的打字速度以及正確率,請用戶放心使用。</p><p>  關鍵詞:打字速度;正確率;熟練度;JAVA </p><p><b>  目錄</b></p><p>  1 設計背景和意義1</p>

5、;<p>  1.1 設計背景1</p><p>  1.2 設計目的及意義1</p><p><b>  2 需求分析1</b></p><p>  2.1 系統(tǒng)所需完成的任務1</p><p>  2.2 系統(tǒng)功能需求分析2</p><p><b>  3 總

6、體設計2</b></p><p>  3.1 系統(tǒng)設計目標2</p><p>  3.2 系統(tǒng)體系結構3</p><p>  3.3 程序結構設計3</p><p><b>  4 詳細設計4</b></p><p>  4.1 起始界面設計5</p><

7、;p>  4.2 添加文件界面設計6</p><p>  4.3 設置測試時間設計7</p><p>  4.4 速度和剩余時間設計8</p><p>  4.5 顯示測試成績設計9</p><p><b>  5 系統(tǒng)測試9</b></p><p>  5.1 系統(tǒng)測試的方法1

8、0</p><p>  5.2 程序測試10</p><p><b>  6 設計總結10</b></p><p><b>  參考文獻11</b></p><p><b>  附錄12</b></p><p><b>  1 設計背景

9、和意義</b></p><p><b>  1.1 設計背景</b></p><p>  二十世紀的后半期,尤其是90年代后,計算機取得了飛速的發(fā)展。近來,隨著網(wǎng)絡的發(fā)展,計算機已經(jīng)成為人們生活中不可缺少的一部分。提高人們對計算機的操作能力顯得尤為重要。而打字速度是衡量一個人操作熟練的一個重要方面。因此開發(fā)一種高效的打字程序顯得迫在眉睫。目前大多數(shù)打字程序

10、都是只能在Windows下運行,跨平臺運行能力不是很強。為了適應當下的需求,格外需要一款能夠新的打字程序。</p><p>  本程序使用的開發(fā)工具是java1.7,它目前是比較流行的java語言開發(fā)工具,在執(zhí)行效率方面表現(xiàn)良好,在跨平臺方面更是強項。因此用戶可以放心使用。</p><p>  1.2 設計目的及意義</p><p>  隨著科學技術的不斷提高,計算

11、機科學目漸成熟,計算機怩深入到工作和生活的各個角落,文字錄入是學習計算機非常重要的一部分。在手寫錄入技術和語音識別技術還不完善的同時大部分人還在使用鍵盤作為文字錄入的工具。所以我編了這樣一個小程序,同時也是我的面向對象程序設計的課程設計。希望能對電腦初學都和想提高打字速度的朋友們有所幫助。</p><p>  本系統(tǒng)構建學生打字練習系統(tǒng),基于所開發(fā)的打字程序界面友好,圖形復雜。打字練習程序中應用到eclipse最

12、新版本,java1.7以上版本的jdk。對于打字測試進入整體的部署。完成打字練習程序開發(fā),培養(yǎng)程序設計和開發(fā)能力。</p><p><b>  2 需求分析</b></p><p>  2.1 系統(tǒng)所需完成的任務</p><p>  打字速度測試程序。要求設計一款打字速度測試程序,要求界面良好,實現(xiàn)從磁盤上尋找打開一個文件、設置打字時間、時實顯

13、示打字速度和剩余時間等功能,應用到GUI,多線程,文件的輸入輸出等知識。</p><p>  需要從磁盤打開要錄入文件的樣本,錄入前可以設定錄入練習時間,錄入時需要實時顯示錄入速度和剩余時間,錄入結束后,顯示錄入速度和錯誤率。錄入結束方式可以通過點擊“結束測試”按鈕結束測試,文章錄入完成也自動結束錄入,到達設置時間也自動結束錄入。最后要求圖形界面,界面良好美觀。</p><p>  根據(jù)任

14、務要求主要遇到的問題在于如何很好的監(jiān)聽按鍵菜單事件,監(jiān)聽部分鍵盤如(ctrl+o和enter);如何在打開文件對話框中過濾只顯示txt和目錄文件,讀取文件后如何一部一部地顯示并能正確統(tǒng)計錄入字數(shù)和錯誤字數(shù);如何在錄入文章時,同時監(jiān)控系統(tǒng)時間,并能盡量減少cpu占用。</p><p>  2.2 系統(tǒng)功能需要分析</p><p>  經(jīng)過對現(xiàn)有一般打字程序的使用者的調查與分析,得出若要編寫此

15、打字程序,本程序必需主要實現(xiàn)的管理功能如下:</p><p>  添加文件。從磁盤添加現(xiàn)有的文本文件顯示在程序界面上方。</p><p>  設置測試時間。在打字開始前,可以設置測試時間,方便快捷地結束測試。</p><p>  顯示測試結果。結果主要包括:打字速度和錯誤率。</p><p>  在錄入過程中,顯示當前速度和剩余時間。為了時實

16、提醒用戶打字速度和打字時間必需可以時實提示打字速度和剩余時間(剩余時間是設置的測試時間減掉已使用的時間)。</p><p>  使用菜單欄。要求菜單欄可以從“文件——>打開”添加文件,可以從“文件——>退出”退出程序,可以從“幫助——>關于”了解程序信息。</p><p>  多情況結束測試。1、當測試結束時,結束測試。2、當點擊“結束測試”按鈕結束測試。3、當文章錄入完

17、成結束測試。</p><p><b>  3 總體設計</b></p><p>  3.1 系統(tǒng)設計目標</p><p>  從磁盤添加現(xiàn)有的文本文件顯示在程序界面上方。在打字開始前,可以設置測試時間,方便快捷地結束測試。顯示測試結果。結果主要包括:打字速度和錯誤率。在錄入過程中,顯示當前速度和剩余時間。為了時實提醒用戶打字速度和打字時間必需可

18、以時實提示打字速度和剩余時間(剩余時間是設置的測試時間減掉已使用的時間)。使用菜單欄。要求菜單欄可以從“文件——>打開”添加文件,可以從“文件——>退出”退出程序,可以從“幫助——>關于”了解程序信息。多情況結束測試。1、當測試結束時,結束測試。2、當點擊“結束測試”按鈕結束測試。3、當文章錄入完成結束測試。文字錄入是學習計算機非常重要的一部分。在手寫錄入技術和語音識別技術還不完善的同時大部分人還在使用鍵盤作為文字錄入

19、的工具。所以我編了這樣一個小程序,同時也是我的面向對象程序設計的課程設計。</p><p>  3.2 系統(tǒng)體系結構</p><p>  本程序主要分為以下幾個子模塊:添加文件、打開、退出、關于、開始測試、結束測試等。系統(tǒng)結構設計圖如圖3-1所示。</p><p>  圖3-1系統(tǒng)功能模塊圖</p><p>  3.3 程序結構設計</

20、p><p>  根據(jù)分析最后決定本程序整體是用一個Typer主類和用一個TyperProgram類完成圖形界面和監(jiān)聽響應事件,在內部用Timer類實現(xiàn)對系統(tǒng)時間監(jiān)控顯示和完成錄入后的成績計算。其中監(jiān)聽鍵盤和文本輸入用匿名內部類來實現(xiàn),TyperProgram和Timer用多線程來實現(xiàn)并發(fā)運行。當程序運行時TyperProgram的對象先運行,當點擊開始按鈕時Timer對象開始運行。</p><p&

21、gt;  主要應用到的API類有:</p><p>  java.io.*;java.awt.*;java.awt.event.*;javax.swing.*;javax.swing.event.*;javax.swing.filechooser.FileFilter。程序的主類是Typer。</p><p>  需要編寫的主要函數(shù)有:</p><p>  setW

22、indow()用來設計用戶界面,整體的JFrame用BorderLayout進行布局分成北中南三個塊。其中北邊是一個用GridLayout布局的JPanel分成0行2列,兩列中分別是一個JTextField;中間是一個GridLayout布局的JPanel分成2行1列;南邊是一個FlowLayout布局的JPanel,里面放兩個居中的按鈕。</p><p>  setListener()用來設置多種監(jiān)聽,如事件監(jiān)

23、聽,鍵盤監(jiān)聽,文本監(jiān)聽等。其中事件監(jiān)聽由于實現(xiàn)了接口ActyionListener,直接添加本類,再于函數(shù)actionPerformed()來實現(xiàn),而其它監(jiān)聽都用的是匿名內部類來實現(xiàn)。很成功地完成了多種監(jiān)聽處理功能。</p><p>  putScore()用來結束測試后,統(tǒng)計錯誤率,并將錯誤率顯示在界面,右上方的JTextField中。</p><p>  其它函數(shù)主要用于實現(xiàn)接口或者完

24、成上面函數(shù)的部分功能。</p><p>  程序結構設計如圖3-2</p><p>  圖3-2 程序結構模塊圖</p><p><b>  4 詳細設計</b></p><p>  4.1 起始界面設計</p><p>  窗口為一個添加菜單欄的JFrame,菜單欄包括主要有文件和幫助兩個部分,

25、整體的JFrame用BorderLayout進行布局分成北中南三個塊。其中北邊是一個用GridLayout布局的JPanel分成0行2列,兩列中分別是一個JTextField;中間是一個GridLayout布</p><p>  局的JPanel分成2行1列,每行分別為一個CardLayout布局的JPanel,其中第一行里放了一個帶按鈕的JPanel和一個JTextArea,第二行里為一個JTextArea;南

26、邊是一個FlowLayout布局的JPanel,里面放兩個居中的按鈕。主要代碼如下:</p><p>  JFrame jf=new JFrame(“11控制云堯作品——打字軟件”);</p><p>  Container cont=jf.getContentPane();</p><p>  cont.setLayout(new BorderLayout());

27、</p><p>  jm=new JMenu("文件");</p><p>  jmHelp=new JMenu("幫助");</p><p>  jmi=new JMenuItem("打開");</p><p>  jmi.setActionCommand("打開&

28、quot;);</p><p>  jmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL _MASK));</p><p>  jmiExit= new JMenuItem("退出");jmiExit.setActionCommand("退出");</

29、p><p>  jmiAbout=new JMenuItem("關于");jmiAbout.setActionCommand("關于");</p><p>  jm.add(jmi);jm.addSeparator();jm.add(jmiExit);</p><p>  jmHelp.add(jmiAbout);</p&g

30、t;<p>  jmb.add(jm);jmb.add(jmHelp);</p><p>  JPanel jptf=new JPanel(new GridLayout(0,2));</p><p>  jptf.add(jtf1);jptf.add(jtf2);</p><p>  cont.add(BorderLayout.NORTH,jptf);

31、</p><p>  jpg.setLayout(new GridLayout(2,0,0,30));</p><p>  jta1=new JTextArea();</p><p>  jta2=new JTextArea(){</p><p>  private static final long serialVersionUID = 1

32、L;</p><p>  @Override public void paste(){}</p><p><b>  };</b></p><p>  jbAdd=new JButton("添加文件");jbAdd.setActionCommand("打開");</p><p> 

33、 jpb=new JPanel(new CardLayout(300,80));</p><p>  jpb.add("card",jbAdd);</p><p>  jpc1.add("card1",jpb);jpc1.add("card2",jta1);</p><p>  JLabel jpng=ne

34、w JLabel(new ImageIcon("image/keyboard.jpg"));</p><p>  jpc2=new JPanel(card2);</p><p>  jpc2.add("card1",jpng);jpc2.add("card2",jta2);</p><p>  jpg.ad

35、d(jpc1);jpg.add(jpc2);</p><p>  cont.add(BorderLayout.CENTER,jpg);</p><p>  jpf=new JPanel();</p><p>  jpf.setLayout(new FlowLayout(FlowLayout.CENTER,50,0));</p><p>  j

36、b1=new JButton("開始測試");jb1.setActionCommand("開始");</p><p>  jb2=new JButton("結束測試");jb2.setActionCommand("結束");</p><p>  jpf.add(jb1);jpf.add(jb2);</p&

37、gt;<p>  cont.add(BorderLayout.SOUTH,jpf);</p><p>  起始界面如圖4-1:</p><p>  圖4-1 起始界面圖</p><p>  4.2 添加文件界面設計</p><p>  添加打開文件用打開對話框,并對對話框添加文件過濾器,代碼如下:</p><

38、p>  JFileChooser fileCh=new JFileChooser();</p><p>  fileCh.setCurrentDirectory(new File("files"));</p><p>  fileCh.setFileFilter(new FileFilter(){</p><p>  public bool

39、ean accept(File f){</p><p>  return f.getName().toLowerCase().endsWith(".txt")||f.isDirectory();</p><p><b>  }</b></p><p>  public String getDescription(){&

40、lt;/p><p>  return "文本文檔 *.txt*";</p><p><b>  }</b></p><p><b>  });</b></p><p>  if(fileCh.showOpenDialog(null)==JFileChooser.CANCEL_OPTI

41、ON)return;</p><p>  getPath=fileCh.getSelectedFile();</p><p>  if(!getPath.getPath().toLowerCase().endsWith(".txt")){</p><p>  JOptionPane.showMessageDialog(null,"請選擇

42、文本文檔","提示",JOptionPane.INFORMATION_MESSAGE);</p><p><b>  return;</b></p><p><b>  }</b></p><p>  添加文件界面設計如圖4-2:</p><p>  圖4-2 添加文件

43、界面圖</p><p>  4.3 設置測試時間設計</p><p>  錄入時間設定用一個對話框實現(xiàn),并接收輸入信息,默認錄入測試時間為5分鐘,主要代碼如下:</p><p>  JPanel jp=new JPanel(new GridLayout(2,0));</p><p>  JLabel jlab=new JLabel("

44、;設置測試時間(分):");</p><p>  JTextField jtfTime=new JTextField();</p><p>  jtfTime.setText("5");</p><p>  jp.add(jlab);jp.add(jtfTime);</p><p>  int select=JO

45、ptionPane.showConfirmDialog(null,jp,"設置",JOptionPane.OK_CANCEL_OPTION,JOptionPane.PLAIN_MESSAGE);</p><p>  if(select!=JOptionPane.OK_OPTION)return;</p><p>  strTime=jtfTime.getText();&

46、lt;/p><p>  測試時間設置如圖4-3</p><p>  圖4-3 測試時間設置圖</p><p>  4.4 速度和剩余時間設計</p><p>  實時顯示錄入速度和剩余時間通過實現(xiàn)Runnable接口的一個Timer類來計算實現(xiàn)。當開始錄入時獲取一個系統(tǒng)時間startTime=System.currentTimeMillis(),

47、然后每隔一秒獲取一個系統(tǒng)時間nowTime=System.currentTimeMillis(),同時統(tǒng)計當前錄入的字數(shù)count=jta2.getText().length(),字數(shù)除以用兩個時間之差得到速度最后單位換算為(字/分);剩余時間等于設置時間減去花費的時間remainTime=setTime-spendTime最后轉換為*分*秒。如圖4-4</p><p><b>  圖4-4測試進行中&

48、lt;/b></p><p>  4.5 顯示測試成績</p><p>  顯示錄入速度和錯誤率。錄入速度計算同上,錯誤率等于總的錯字數(shù)/錄入總字數(shù)error=(words+l)==0?0:((errorWords+k)*1.0/(words+l))*100(注:如果沒有錄入就結束測試,錯誤率為0%)。如圖4-5</p><p>  圖4-5 測試結束<

49、;/p><p><b>  5 系統(tǒng)測試</b></p><p>  系統(tǒng)測試是一個系統(tǒng)在正式投入到使用運行之前,對于該系統(tǒng)的需求分析、系統(tǒng)的設計規(guī)格、程序的可執(zhí)行代碼以及系統(tǒng)各功能模塊的使用情況等方面進行全面的審查和驗收,從而判斷該系統(tǒng)是否能夠滿足用戶的需求,可見系統(tǒng)測試是對系統(tǒng)質量把關過程中至關重要的一步。</p><p>  5.1 系統(tǒng)測試

50、的方法</p><p>  運行程序,測試程序是否能正常運行,是否有錯誤,或者異常,同時檢測程序的cpu和內存的占用率。</p><p><b>  5.2 程序測試</b></p><p>  尋找若干名用戶,使用本程序進行打字測試,征求改進意義。正常運行順序如下:添加文件/打開——>開始測試——>結束測試,非正常的運行會彈出提示

51、對話框。</p><p><b>  6 設計總結</b></p><p>  本次課程設計提供了一個既動手又動腦,獨立實踐的機會,將課本上的理論知識和實際有機的結合起來,鍛煉了我分析解決實際問題的能力。提高我的適應實際,實踐編程的能力。本課程設計旨在培養(yǎng)了我的動手能力和學習能力。通過對動手編寫本程序,我可以學習更多的實用內容和方法,而這些資料多以英文方式給出,不但鍛

52、煉了我的學習能力,而且還鍛煉我的閱讀和理解能力。</p><p>  此外本程序還存在一些問題待完善,測試過程中錄入錯字后要沒有標記,不能很好的顯示出錯的字。另外在一些低版本的jdk1.6中,錄入時會出現(xiàn)無法錄入英文和數(shù)字,只能輸入中文,也無法退格(backspace)的現(xiàn)象。建議使用較高版本的jdk1.6,或者使用jdk1.7以上版本。</p><p>  隨著科學技術的不斷提高,計算機

53、科學目漸成熟,計算機怩深入到工作和生活的各個角落,文字錄入是學習計算機非常重要的一部分。在手寫錄入技術和語音識別技術還不完善的同時大部分人還在使用鍵盤作為文字錄入的工具。所以我編了這樣一個小程序,同時也是我的面向對象程序設計的課程設計。希望能對電腦初學都和想提高打字速度的朋友們有所幫助。</p><p><b>  參考文獻</b></p><p>  《Java大學

54、實用教程》..耿祥義編著.電子工業(yè)出版社.2005年版</p><p>  2.《數(shù)據(jù)庫原理及應用教程》.陳志泊主編.人民郵電出版社。</p><p>  3.《數(shù)據(jù)庫實驗指導》.楊海霞等編著.人民郵電出版社。</p><p>  參考書:《Eclipse RCP Tutor》,Eclipse組織,網(wǎng)址http://www.eclipse.org/rcp</p

55、><p><b>  附錄:</b></p><p><b>  源程序:</b></p><p>  import java.io.*;</p><p>  import java.awt.*;</p><p>  import java.awt.event.*;</p&

56、gt;<p>  import javax.swing.*;</p><p>  import javax.swing.event.*;</p><p>  import javax.swing.filechooser.FileFilter;</p><p>  class TyperProgram extends Thread implements

57、ActionListener {</p><p>  private JPanel jpc1,jpc2;</p><p>  private JMenuItem jmi,jmiExit,jmiAbout;</p><p>  private JTextField jtf1,jtf2;</p><p>  private JTextArea j

58、ta1,jta2;</p><p>  private JButton jb1,jb2,jbAdd;</p><p>  private CardLayout card1,card2;</p><p>  private String state="",strTime="";</p><p>  pri

59、vate StringBuffer strbFile;</p><p>  private int words,errorWords;</p><p>  private double startTime;</p><p>  private File getPath;</p><p>  private BufferedReader buf

60、;</p><p>  private boolean fileOver,lock=true;</p><p>  private class Timer implements Runnable{</p><p>  public void putScore(){</p><p>  jta2.setEditable(false);</

61、p><p>  String str1,str2;int l1,l2;</p><p>  str1=jta1.getText();l1=str1.length();</p><p>  str2=jta2.getText();l2=str2.length();</p><p>  double error;</p><p&g

62、t;  int k=l1<l2?l2-l1:0,l=l1<l2?l1:l2;</p><p>  for(int i=0;i<l;i++)</p><p>  if(str1.charAt(i)!=str2.charAt(i))</p><p><b>  k++;</b></p><p>  erro

63、r=(words+l)==0?0:((errorWords+k)*1.0/(words+l))*100;</p><p>  jtf2.setText("錯誤率:"+Math.ceil(error*100)/100.0+"%");</p><p>  errorWords=0;words=0;</p><p>  state=

64、"addFile";lock=true;</p><p>  jb1.requestFocus();</p><p><b>  }</b></p><p>  public void run(){</p><p>  double nowTime,spendTime,setTime,speed=0,

65、remainTime;</p><p>  int count,remainMin,remainSec;</p><p>  nowTime=System.currentTimeMillis();</p><p>  spendTime=(nowTime-startTime)/60000;</p><p>  setTime=Double.p

66、arseDouble(strTime);</p><p>  while(spendTime<setTime&&!state.equals("over")){</p><p>  count=jta2.getText().length();</p><p>  speed=(words+count)/spendTime;&l

67、t;/p><p>  remainTime=setTime-spendTime;</p><p>  remainMin=(int)remainTime;</p><p>  remainSec=(int)Math.round((remainTime-remainMin)*60);</p><p>  jtf1.setText("當前的

68、速度:"+Math.round(speed)+"字/分");</p><p>  jtf2.setText("剩余時間:"+remainMin+"分"+remainSec+"秒");</p><p><b>  try{</b></p><p>  Thr

69、ead.sleep(1000);</p><p>  }catch(Exception e){</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  nowTime=System.currentTimeMillis();</p><p

70、>  spendTime=(nowTime-startTime)/60000;</p><p><b>  }</b></p><p>  jtf1.setText("速度:"+Math.round(speed)+"字/分");</p><p>  putScore();</p>&l

71、t;p><b>  }</b></p><p><b>  }</b></p><p>  public void setWindow(){</p><p>  JFrame jf=new JFrame("11控制云堯作品——打字軟件");</p><p>  Contai

72、ner cont=jf.getContentPane();</p><p>  cont.setLayout(new BorderLayout());</p><p>  Font ft=new Font("新新字體",Font.PLAIN,20);</p><p>  JMenuBar jmb=new JMenuBar();</p>

73、<p>  JMenu jm,jmHelp;</p><p>  jm=new JMenu("文件");</p><p>  jmHelp=new JMenu("幫助");</p><p>  jmi=new JMenuItem("打開");jmi.setActionCommand("

74、;打開");</p><p>  jmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));</p><p>  jmiExit= new JMenuItem("退出");jmiExit.setActionCommand("退出");<

75、/p><p>  jmiAbout=new JMenuItem("關于");jmiAbout.setActionCommand("關于");</p><p>  jm.add(jmi);jm.addSeparator();jm.add(jmiExit);</p><p>  jmHelp.add(jmiAbout);</p&

76、gt;<p>  jmb.add(jm);jmb.add(jmHelp);</p><p>  jtf1=new JTextField();</p><p>  jtf1.setFont(ft);</p><p>  jtf1.setEditable(false);</p><p>  jtf2=new JTextField()

77、;</p><p>  jtf2.setFont(ft);</p><p>  jtf2.setEditable(false);</p><p>  JPanel jptf=new JPanel(new GridLayout(0,2));</p><p>  jptf.add(jtf1);jptf.add(jtf2);</p>

78、<p>  cont.add(BorderLayout.NORTH,jptf);</p><p>  JPanel jpg,jpf,jpb;</p><p>  jpg=new JPanel();</p><p>  jpg.setLayout(new GridLayout(2,0,0,30));</p><p>  jta1=ne

79、w JTextArea();</p><p>  jta2=new JTextArea(){</p><p>  private static final long serialVersionUID = 1L;</p><p>  @Override public void paste(){}</p><p><b>  };<

80、;/b></p><p>  jta1.setFont(ft);</p><p>  jta1.setLineWrap(true);</p><p>  jta1.setEditable(false);</p><p>  jta1.setBackground(new Color(200,255,200));</p>&l

81、t;p>  jta2.setFont(ft);</p><p>  jta2.setLineWrap(true);</p><p>  jta2.setEditable(false);</p><p>  jta2.setBackground(new Color(200,200,255));</p><p>  jbAdd=new JB

82、utton("添加文件");</p><p>  jbAdd.setActionCommand("打開");</p><p>  jpb=new JPanel(new CardLayout(300,80));</p><p>  jpb.add("card",jbAdd);</p><p

83、>  card1=new CardLayout();</p><p>  jpc1=new JPanel(card1);</p><p>  jpc1.add("card1",jpb);jpc1.add("card2",jta1);</p><p>  card2=new CardLayout();</p>

84、<p>  jpc2=new JPanel(card2);</p><p>  jpc2.add("card2",jta2);</p><p>  jpg.add(jpc1);jpg.add(jpc2);</p><p>  cont.add(BorderLayout.CENTER,jpg);</p><p>

85、  jpf=new JPanel();</p><p>  jpf.setLayout(new FlowLayout(FlowLayout.CENTER,50,0));</p><p>  jb1=new JButton("開始測試");jb1.setActionCommand("開始");</p><p>  jb2=new

86、 JButton("結束測試");jb2.setActionCommand("結束");</p><p>  jpf.add(jb1);jpf.add(jb2);</p><p>  cont.add(BorderLayout.SOUTH,jpf);</p><p>  jf.setBounds(250,50,810,630)

87、;</p><p>  Toolkit toolkit = jf.getToolkit();</p><p>  Image image = toolkit.getImage("image/chen.png");</p><p>  jf.setIconImage(image);</p><p>  jf.setJMenu

88、Bar(jmb);</p><p>  jf.setVisible(true);</p><p>  jbAdd.requestFocus();</p><p>  jf.setResizable(false);</p><p>  jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</

89、p><p><b>  }</b></p><p>  public void readyFile(){</p><p>  String strFile="";</p><p>  FileReader in=null;</p><p><b>  try{</

90、b></p><p>  String strLine="";</p><p>  in=new FileReader(getPath);</p><p>  buf=new BufferedReader(in);</p><p>  strLine=buf.readLine();</p><p&

91、gt;  while(strLine!=null){</p><p>  strFile+=strLine;</p><p>  strLine=buf.readLine();</p><p><b>  }</b></p><p>  }catch(IOException e1){</p><p&g

92、t;  e1.printStackTrace();</p><p><b>  }</b></p><p>  strbFile=new StringBuffer(strFile);</p><p>  fileOver=false;</p><p><b>  }</b></p>&

93、lt;p>  public void readFile(){</p><p>  String strPart=""; int n=320;</p><p>  if(strbFile.length()<=n){</p><p>  jta1.setText(strbFile+"\n");</p>&

94、lt;p>  fileOver=true;</p><p><b>  return;</b></p><p><b>  }</b></p><p>  strPart=strbFile.substring(0,n);</p><p>  strbFile=strbFile.delete(0

95、,n);</p><p>  jta1.setText(strPart+"\n");</p><p><b>  }</b></p><p>  public void addFile(){</p><p>  JFileChooser fileCh=new JFileChooser();</p

96、><p>  fileCh.setCurrentDirectory(new File("files"));</p><p>  fileCh.setFileFilter(new FileFilter(){</p><p>  public boolean accept(File f){</p><p>  return f.g

97、etName().toLowerCase().endsWith(".txt")||f.isDirectory();</p><p><b>  }</b></p><p>  public String getDescription(){</p><p>  return "文本文檔 *.txt*";&l

98、t;/p><p><b>  }</b></p><p><b>  });</b></p><p>  if(fileCh.showOpenDialog(null)==JFileChooser.CANCEL_OPTION)return;</p><p>  getPath=fileCh.getSele

99、ctedFile();</p><p>  if(!getPath.getPath().toLowerCase().endsWith(".txt")){</p><p>  JOptionPane.showMessageDialog(null,"請選擇文本文檔","提示",JOptionPane.INFORMATION_MESSA

100、GE);</p><p><b>  return;</b></p><p><b>  }</b></p><p>  readyFile();</p><p>  readFile();</p><p>  state="addFile";</p

101、><p>  card1.show(jpc1,"card2");</p><p>  jb1.requestFocus();</p><p><b>  }</b></p><p>  public boolean isDigit(String str){</p><p><

102、b>  int k=0;</b></p><p>  if(str.equals(""))return false;</p><p>  for(int i=0;i<str.length();i++){</p><p>  if(str.charAt(i)=='.'&&k++==0)i++;

103、</p><p>  if(!Character.isDigit(str.charAt(i)))return false;</p><p><b>  }</b></p><p>  return true;</p><p><b>  }</b></p><p>  pub

104、lic void setstart(){</p><p>  JPanel jp=new JPanel(new GridLayout(2,0));</p><p>  JLabel jlab=new JLabel("設置測試時間(分):");</p><p>  JTextField jtfTime=new JTextField();</p

105、><p>  jtfTime.setText("5");</p><p>  jp.add(jlab);jp.add(jtfTime);</p><p>  int select=JOptionPane.showConfirmDialog(null,jp,"設置",JOptionPane.OK_CANCEL_OPTION,JOpt

106、ionPane.PLAIN_MESSAGE);</p><p>  if(select!=JOptionPane.OK_OPTION)return;</p><p>  strTime=jtfTime.getText();</p><p>  if(isDigit(strTime)){</p><p>  if(jta1.getText()!

107、=null){</p><p>  readyFile();</p><p>  readFile();</p><p><b>  }</b></p><p>  card2.show(jpc2,"card2");</p><p>  jta2.setText(null);&

108、lt;/p><p>  jta2.setEditable(true);</p><p>  jta2.requestFocus();</p><p>  state="start";</p><p>  lock=false;</p><p>  startTime=System.currentTime

109、Millis();</p><p>  Timer ti=new Timer();</p><p>  Thread t=new Thread(ti);</p><p>  t.start();</p><p><b>  }</b></p><p><b>  else{</b&

110、gt;</p><p>  JOptionPane.showMessageDialog(null,"請輸入數(shù)字","提示",JOptionPane.INFORMATION_MESSAGE);</p><p><b>  }</b></p><p><b>  }</b></p&

111、gt;<p>  public void setListener(){</p><p>  jmi.addActionListener(this);</p><p>  jmiExit.addActionListener(this);</p><p>  jmiAbout.addActionListener(this);</p><

112、p>  jbAdd.addActionListener(this);</p><p>  jb1.addActionListener(this);</p><p>  jb2.addActionListener(this);</p><p>  jbAdd.addKeyListener(new KeyListener(){</p><p&g

113、t;  public void keyPressed(KeyEvent e1){</p><p>  if(e1.getKeyCode()==KeyEvent.VK_ENTER)</p><p>  addFile();</p><p><b>  }</b></p><p>  public void keyRelea

114、sed(KeyEvent e2){}</p><p>  public void keyTyped(KeyEvent e2){}</p><p><b>  });</b></p><p>  jta2.getDocument().addDocumentListener(new DocumentListener(){</p>&l

115、t;p>  public void insertUpdate(DocumentEvent e1){</p><p>  String str1=jta1.getText();</p><p>  String str2=jta2.getText();</p><p>  if(str1.length()==str2.length()&&str2

116、.endsWith("\n")){</p><p>  if(fileOver){</p><p>  state="over";</p><p><b>  }</b></p><p><b>  else{</b></p><p>

117、  words+=str2.length();</p><p>  for(int i=0;i<str2.length();i++)</p><p>  if(str1.charAt(i)!=str2.charAt(i))</p><p>  errorWords++;</p><p>  EventQueue.invokeLater(

118、new Runnable(){</p><p>  public void run() {</p><p>  jta2.setText(null);</p><p><b>  }</b></p><p><b>  });</b></p><p>  readFile()

119、;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  public void changedUpdate(DocumentEvent e2){}</p><p> 

120、 public void removeUpdate(DocumentEvent e3){}</p><p><b>  });</b></p><p><b>  }</b></p><p>  public void actionPerformed(ActionEvent e){</p><p>

121、  String strAction=e.getActionCommand();</p><p>  if(strAction=="打開"&&lock){</p><p>  addFile();</p><p><b>  }</b></p><p>  else if(strAct

122、ion=="退出"){</p><p>  System.exit(1);</p><p><b>  }</b></p><p>  else if(strAction=="關于"){</p><p>  String str="版權所有(c):云堯";<

123、;/p><p>  JOptionPane.showMessageDialog(null,str,"關于",JOptionPane.PLAIN_MESSAGE);</p><p><b>  }</b></p><p>  else if(strAction=="開始"&&lock){<

124、/p><p>  if(!state.equals("addFile"))</p><p>  JOptionPane.showMessageDialog(null,"你還沒有添加有效文檔","提示",JOptionPane.INFORMATION_MESSAGE);</p><p><b>  el

125、se</b></p><p>  setstart();</p><p><b>  }</b></p><p>  else if(strAction=="結束"){</p><p>  if(!state.equals("start"))</p>&l

126、t;p>  JOptionPane.showMessageDialog(null,"你還沒有測試","提示",JOptionPane.INFORMATION_MESSAGE);</p><p><b>  else</b></p><p>  state="over";</p><p

127、><b>  }</b></p><p><b>  }</b></p><p>  public void run(){</p><p>  setWindow();</p><p>  setListener();</p><p><b>  }</

溫馨提示

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

評論

0/150

提交評論