亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        王占中,張涵

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

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

        中圖分類號:TP312文獻(xiàn)標(biāo)示碼: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ù),需要用戶用鼠標(biāo)點擊相應(yīng)位置一下才可以輸入數(shù)據(jù),給用戶帶來諸多不便。于是尋求解決的方法,愿將方法尋找的過程以及最后的結(jié)果奉獻(xiàn)出來,供方家們指正。如有尺寸可取,不勝欣慰。

        1 方案的尋求過程

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

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

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

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

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

        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)一個問題:在默認(rèn)情況下,一個JScrollPane面板得不到鍵盤輸入,即不能接受任何鍵盤事件。如想要使用必須要重載其isFocusTraversable方法,使其返回true[1]。這樣比較繁瑣。最后確定將監(jiān)視器放置在JTable組件上。本來就是為JTable輸入的問題,順理成章。收到了預(yù)期的效果。

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

        2.2 AWT機(jī)器人技術(shù)

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

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

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

        首先確定,表格單元輸入數(shù)據(jù)時,可以改變單元格位置的鍵是Tab(制表)鍵、Enter(回車)鍵、上箭頭、下箭頭、左箭頭、右箭頭。于是設(shè)置鍵盤事件監(jiān)視器,監(jiān)視這幾個鍵的動作。一旦用戶點擊這些鍵,由機(jī)器人完成既定操作。具體實現(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)功能。對于用戶擊鍵的認(rèn)定用到了虛擬鍵代碼,虛擬鍵代碼和PC機(jī)的掃描碼類似(并且相關(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加入一個鼠標(biāo)事件監(jiān)視器,捕捉用戶鼠標(biāo)點擊的操作。具體的監(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);}}

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

        4 討論

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

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

        參考文獻(xiàn):

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

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

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

        猜你喜歡
        機(jī)器人
        機(jī)器人,讓未來走近你
        金橋(2019年10期)2019-08-13 07:15:16
        機(jī)器人來幫你
        認(rèn)識機(jī)器人
        機(jī)器人來啦
        為什么造機(jī)器人?
        認(rèn)識機(jī)器人
        中文字幕不卡在线播放| 中文字幕在线亚洲三区| av中文字幕性女高清在线| 亚洲国产美女高潮久久久| 久久人人爽人人爽人人片av高请| 99久久婷婷国产综合亚洲| 天天躁日日躁狠狠躁欧美老妇| 成片免费观看视频大全| 国产三级在线视频播放| 一本久道久久综合狠狠操 | 中文亚洲av片不卡在线观看| 亚洲av第一页国产精品| 国产又黄又猛又粗又爽的a片动漫| 亚洲综合一区二区三区四区五区| 在线观看av手机网址| 超短裙老师在线观看一区二区| 乳乱中文字幕熟女熟妇| 国产乱码一区二区三区精品| 美女mm131爽爽爽| 一性一交一口添一摸视频| 99精品成人片免费毛片无码| 色婷婷精品综合久久狠狠| 国产亚洲一区二区三区三州 | 99久久国内精品成人免费| 大地资源在线观看官网第三页| 无码人妻精品一区二区三区下载 | 亚洲视频在线免费观看一区二区| 公和我做好爽添厨房| 亚洲啪啪综合av一区| 亚洲丁香婷婷综合久久小说| 亚洲综合久久久中文字幕| 大香焦av一区二区三区| 久久www免费人成人片| 中文字幕乱偷乱码亚洲| 国产美女黄性色av网站| 日韩一区二区av伦理 | 美女无遮挡免费视频网站| 国产午夜激无码av毛片| 日本a在线播放| 色婷婷亚洲一区二区在线| 伊人中文字幕亚洲精品乱码|