• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      JTable內(nèi)中文輸入的一種解決方案

      2009-09-30 05:54:42王占中,張涵
      電腦知識與技術(shù) 2009年34期
      關(guān)鍵詞:機器人

      王占中,張涵

      摘要:為了能在JTable表格中方便地輸入中文數(shù)據(jù),創(chuàng)造性地研究出某些特殊的能在中文輸入法下直接啟動數(shù)據(jù)輸入的鍵盤鍵位。利用JAVA中機器人技術(shù)完成特定的動作,提高了用戶輸入的效率,也豐富了JAVA機器人技術(shù)的應(yīng)用。

      關(guān)鍵詞:JAVA;JTable;機器人;事件監(jiān)視器

      中圖分類號:TP312文獻標示碼:A文章編號:1009-3044(2009)34-9859-02

      A Solution to Input Chinese Data in JTable

      WANG Zhan-zhong, ZHANG Han

      (Department of Computer Science and Information Engineering, Anyang Institute of Technology, Anyang 455000, China)

      Abstract: In order to input conveniently Chinese Data in JTable, Some special keys of keyboard are found creatively, which can make sure users entering Chinese data without inputting anything. By JAVA Robot class, the program may execute automatically special tasks ,which improves users' work efficiency and expands the Robots application.

      Key words: JAVA; JTable; robot; eventlistener

      在用JAVA開發(fā)一個應(yīng)用軟件時,使用JTable作為輸入界面接受用戶輸入的數(shù)據(jù)。用戶在使用過程中發(fā)現(xiàn):用英文輸入法時非常方便,只要用制表鍵或方向箭頭鍵移到要輸入的表格位置,直接輸入即可;而用中文輸入法時,用上面的控制鍵移到要輸入的位置時卻無法直接輸入數(shù)據(jù),需要用戶用鼠標點擊相應(yīng)位置一下才可以輸入數(shù)據(jù),給用戶帶來諸多不便。于是尋求解決的方法,愿將方法尋找的過程以及最后的結(jié)果奉獻出來,供方家們指正。如有尺寸可取,不勝欣慰。

      1 方案的尋求過程

      初遇此問題,計劃從JTable本身尋求解決方案。力圖找到JTable對英文方式、中文方式的區(qū)別。經(jīng)過研究JTable的文檔資料,未能發(fā)現(xiàn)其對中英文方式的不同論述,這方面的努力未能成功。

      既然在中文輸入法下,每到一個表格,都需要而外加一個鼠標點擊的動作,那么不妨由程序自動完成這一動作。這是解決這一問題最容易想到的方案,也是一種常規(guī)的方案。這一方案的問題是鼠標的位置確定需要較為復(fù)雜的計算。對不同的表,表格單元的位置是不一樣的。既使同一表格顯示形式的變化,也會影響表格單元的位置。當(dāng)然JTable提供了從鼠標坐標到表格單元格位置的換算(rowAtPoint(Point p),columnAtPoint(Point p)),但沒有提供相反的運算(確切地講是沒有提供直接的運算,其實可以運用JTable.getRowHeight(int row)和TableColumn.getWidth()計算)。所以計算特定的表格單元所含的點的坐標還是要費一些周折,尤其是各個行的高度、列的寬度可以各不相同。于是放棄了這一方面的努力。

      在舍棄了前面兩種方案之后,對中英文輸入法進行了比較深入的研究與實踐。力圖找到在中英文輸入法中表現(xiàn)完全一致的鍵位。也就是說,這些鍵位是不區(qū)分中文輸入法和英文輸入法的。換句話講,這些鍵位是中文輸入法中存在的少有的英文字符。輸入這種鍵,雖在中文方式下,卻可以直接啟動輸入過程,接著輸入中文或英文都是可以的。實踐證明在微軟中文半角的情況下,如下幾個鍵和英文輸入法表現(xiàn)一致:BackSpace(回格)、Space(空格)、/(斜杠)、-(減號)、=(等號)。進一步考慮對輸入內(nèi)容的影響:這幾個鍵中BackSpace(回格)鍵有可能使單元的內(nèi)容減少一個字符,其余鍵都會使輸入的內(nèi)容有所增加。如使用Space(空格)真正的內(nèi)容多一個空格,其它也一樣。于是采取的方案是:先加一個Space(空格),然后加一個BackSpace(回格),內(nèi)容不變,效果相當(dāng)好。

      2 涉及到的關(guān)鍵技術(shù)

      實施本方案主要使用兩種技術(shù):事件監(jiān)視器與機器人。

      2.1 事件監(jiān)視器技術(shù)

      本來事件監(jiān)視器技術(shù)是JAVA技術(shù)中通用的處理技術(shù),沒有論述的必要。但是將監(jiān)視器放在什么位置還是值得斟酌的。程序的基本結(jié)構(gòu)是這樣的:在某JInternalFrame窗口內(nèi)部放置兩個JScrollPane面板,在其中一個面板內(nèi)放置JTable組件。JInternalFrame窗口本身只是一個框架,在此放置監(jiān)視器是不合適的,況且也沒有添加監(jiān)視器的方法,考慮到面板在此屬于比較固定的組件,于是計劃在JScrollPane面板上放置監(jiān)視器。這里出現(xiàn)一個問題:在默認情況下,一個JScrollPane面板得不到鍵盤輸入,即不能接受任何鍵盤事件。如想要使用必須要重載其isFocusTraversable方法,使其返回true[1]。這樣比較繁瑣。最后確定將監(jiān)視器放置在JTable組件上。本來就是為JTable輸入的問題,順理成章。收到了預(yù)期的效果。

      本文用到的監(jiān)視器兩種類型:鍵盤監(jiān)視器和鼠標監(jiān)視器。前者解決除首次輸入的所有位置的輸入問題,后者自然是解決首次輸入問題。

      2.2 AWT機器人技術(shù)

      Robot類是自JAVA 2的1.3版本添加的,可以利用該類將擊鍵和鼠標點擊發(fā)送到任何AWT程序,該類一般用于自動用戶界面的測試或演示程序[2]。將其用于對某一事件的反映,解決自動擊鍵問題應(yīng)該還是本論文的一個創(chuàng)新。

      Robot類直接繼承自O(shè)bject類,它產(chǎn)生的事件不只是通知某事件隊列或組件有某輸入事件產(chǎn)生,而是引起真正的動作。也就是說它產(chǎn)生的鼠標事件、鍵盤事件能真正地模擬用戶的擊鍵和鼠標動作,從而實現(xiàn)某種自動化。本文就是利用機器人這一特點代替用戶的重復(fù)擊鍵和鼠標動作。

      3 解決方案的實現(xiàn)

      首先確定,表格單元輸入數(shù)據(jù)時,可以改變單元格位置的鍵是Tab(制表)鍵、Enter(回車)鍵、上箭頭、下箭頭、左箭頭、右箭頭。于是設(shè)置鍵盤事件監(jiān)視器,監(jiān)視這幾個鍵的動作。一旦用戶點擊這些鍵,由機器人完成既定操作。具體實現(xiàn)如下:

      private class KeyHandler implements KeyListener{

      public void keyPressed(KeyEvent event){

      int keyCode=event.getKeyCode();

      if(keyCode==KeyEvent.VK_TAB||keyCode==KeyEvent.VK_UP||keyCode==KeyEvent.VK_DOWN||keyCode==KeyEvent.VK_LEFT||keyCode==KeyEvent.VK_RIGHT||keyCode==KeyEvent.VK_ENTER){

      robot.keyPress(KeyEvent.VK_SPACE);

      robot.keyPress(KeyEvent.VK_BACK_SPACE);}}

      public void keyReleased(KeyEvent event){}

      public void keyTyped(KeyEvent event){}}

      此鍵盤監(jiān)視器實現(xiàn)了KeyListener接口。此接口有三個方法,在此用到keyPress方法,也就是擊鍵方法來實現(xiàn)功能。對于用戶擊鍵的認定用到了虛擬鍵代碼,虛擬鍵代碼和PC機的掃描碼類似(并且相關(guān))。虛擬鍵代碼的取值在KeyEvent類內(nèi)定義[3],如Tab(制表)鍵的虛擬鍵代碼為KeyEvent.VK_TAB,余者查閱相關(guān)的文檔均有敘述,讀者可從其取值推斷出代表哪一個鍵。這樣我們在輸入數(shù)據(jù)時,擊這些鍵時,輸入焦距在移動到相應(yīng)的單元格的同時,在用戶輸入數(shù)據(jù)之前自動擊鍵,完成我們需要的動作。

      到此,應(yīng)該說大部分的目的已經(jīng)實現(xiàn),剩下的是精益求精的工作。解決初次輸入數(shù)據(jù)時自動加入操作的問題。初次操作啟于用戶對相應(yīng)表格單元的點擊動作。于是再為JTable加入一個鼠標事件監(jiān)視器,捕捉用戶鼠標點擊的操作。具體的監(jiān)視器構(gòu)造如下:

      private class MouseHandler extends MouseAdapter{

      public void mousePressed(MouseEvent e){

      robot.keyPress(KeyEvent.VK_SPACE);

      robot.keyPress(KeyEvent.VK_BACK_SPACE);}}

      此鼠標監(jiān)視器繼承自MouseAdapter類。這里只是重載了mousePressed方法,利用這一方法完全能實現(xiàn)預(yù)定的功能。

      4 討論

      在實際的軟件開發(fā)工程中會遇到各種各樣的問題,這需要開發(fā)人員認真分析具體的條件不拘一格地拿出解決方案?,F(xiàn)階段使用的大部分計算機軟件來自西方國家特別是美國,默認的字符就是英文字符。中文字符的問題是一個遠沒有解決好的問題,值得關(guān)注。

      本文就特定狀態(tài)下遇到中文輸入問題時的應(yīng)對進行了一些介紹。關(guān)鍵之處:1) 對中英文兩種輸入法下表現(xiàn)完全相同的鍵位的探討;2)對Robot類的應(yīng)用領(lǐng)域的拓展。某個問題解決的方法可能有多個,作者提出的只是一種,希望能得到熱心讀者的指正。

      參考文獻:

      [1] CayS. Horstmann Gary Cornell. Java 2核心技術(shù)卷I:原理(原書第5卷)[M]. 北京:機械工業(yè)出版社,2002.

      [2] Sun. MicroSystems. Java SE6 Documentation. http://java.sun.com/javase/downloads/.

      [3] Y. Daniel Liang. Java語言程序設(shè)計基礎(chǔ)篇[M]. 北京:機械工業(yè)出版社,2006.

      猜你喜歡
      機器人
      機器人,讓未來走近你
      金橋(2019年10期)2019-08-13 07:15:16
      機器人來幫你
      認識機器人
      機器人來啦
      為什么造機器人?
      認識機器人
      阳朔县| 容城县| 米泉市| 石屏县| 鲁甸县| 当雄县| 大冶市| 万山特区| 同江市| 江陵县| 合作市| 东丰县| 博客| 洪雅县| 吉首市| 菏泽市| 延川县| 华蓥市| 淮北市| 鄂伦春自治旗| 渭源县| 龙山县| 额敏县| 阜城县| 大方县| 建阳市| 温宿县| 晋江市| 楚雄市| 周至县| 商丘市| 镇沅| 胶州市| 丹寨县| 尚志市| 邵阳县| 通渭县| 麟游县| 车致| 巴彦县| 安陆市|