亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

讓繪制的Java文本框響應(yīng)輸入法事件

系統(tǒng) 1963 0

在任何一款桌面應(yīng)用中,都難免會(huì)遇到讓用戶(hù)輸入文字或者特殊字符的情況發(fā)生,所以輸入法的支持與文本框組件的存在就變得必不可少。

由于Java具有桌面應(yīng)用開(kāi)發(fā)能力,它的圖形組件中也當(dāng)然配備有文本框,因而無(wú)論是繼承自TextComponent的Text系組件抑或繼承自JTextComponent的JText系組件都提供了讓用戶(hù)輸入數(shù)據(jù)的功能。

現(xiàn)在的疑問(wèn)是,雖然TextComponent與JTextComponent相類(lèi)似,但兩者的父類(lèi)卻并不同級(jí)。TextComponent直接繼承自Component,但Component已經(jīng)是所有Java圖形組件的公共父類(lèi),JTextComponent的父類(lèi)JComponent卻繼承自Container,而Container的父類(lèi)才是Component。

為什么會(huì)這樣呢?如果JTextComponent直接繼承TextComponent難道不好嗎?沒(méi)錯(cuò),不好,或者說(shuō)不能。除了Swing與AWT運(yùn)行原理造成的差異與組件關(guān)系的統(tǒng)一性需求外,造成這樣情況的理由中還有一點(diǎn)至關(guān)重要,那就是不光JTextComponent不能,即便我們想在java.awt包外重載TextComponent也不能。原因在于,雖然TextComponent類(lèi)并非final,但它的唯一構(gòu)造函數(shù)卻是default的,這意味著即便不同包中的類(lèi)繼承了它,也不能構(gòu)造,根本無(wú)法重載。

更何況,就算可以重載的JTextComponent,也與TextComponent一樣存在著一些很麻煩的默認(rèn)配置問(wèn)題(就更不要說(shuō)重載JTextField抑或TextField了)。最主要的是,用它們制作標(biāo)準(zhǔn)文本框固然游刃有余,但如果我們需要的文本框不那么標(biāo)準(zhǔn),甚至需要某些“奇形怪狀”到只要求輸入文字,但根本就算不上文本框的組件時(shí),那么它們勢(shì)必更加捉襟見(jiàn)肘。

那么,我們要怎樣才能滿(mǎn)足這種近乎于“變態(tài)”的要求呢?

很簡(jiǎn)單,自己“畫(huà)”個(gè)文本框出來(lái)就好了,因?yàn)槭恰爱?huà)”的,所以想它怎樣,便是怎樣,因?yàn)槭菓{空繪制,也沒(méi)有利用現(xiàn)成Swing組件繪制時(shí)的不便。

所以能這樣做,就在于Java獲得輸入法支持的關(guān)鍵點(diǎn)不在TextComponent與JTextComponent,而是java.awt.im包下的相關(guān)組件,更具體地說(shuō),只要你實(shí)現(xiàn)了InputMethodListener與InputMethodRequests兩尊大神,那么所有Component都可以支持輸入法,又何必專(zhuān)情于TextComponent與JTextComponent?

閑話少說(shuō),現(xiàn)在我就直接用Canvas來(lái)“畫(huà)”個(gè)文本框,給大家瞧瞧。

TextCanvas.java

運(yùn)行效果如下圖:

00

怎么樣?這時(shí)你在TextCanvas中進(jìn)行輸入操作,是不是與JTextField或TextField里相差無(wú)幾呢?——什么?你說(shuō)就算“重復(fù)發(fā)明輪子”也應(yīng)該有個(gè)限度,已經(jīng)有JTextField與TextField了,你再寫(xiě)一個(gè)有什么用?

嗯,您很聰明,單純的繪制文本框確實(shí)沒(méi)有任何意義,但是,如果有一系列直接通過(guò)AWT繪制的組件與其相呼應(yīng)呢?——比如,偶在LGame-Simple中制作的那一系列UI組件……

那么事情,就會(huì)變成如下這個(gè)樣子。

02

怎么樣呢?如上圖所示,這是一個(gè)純繪制的界面,無(wú)論文本框的字體,大小,顏色乃至透明度,貼圖都可以隨性切換(甚至逆天的將兩個(gè)文本框疊在一起也可以), 而這樣一個(gè)純繪制出的文本框能夠獲得輸入法支持,意味著什么呢?這意味著,一個(gè)相對(duì)于Swing能耗更少,效率更高的類(lèi)Swing體系已經(jīng)搭建成型了!(當(dāng)然,相對(duì)的功能也更少,不過(guò)事無(wú)兩利嘛……)

PS:如上所述,LGame-Simple-0.2.5版Text系組件將獲得輸入法支持,中文或其它語(yǔ)言的輸入已經(jīng)沒(méi)有任何問(wèn)題。(此版預(yù)計(jì)同Android版LGame一道于12月中下旬發(fā)布……不過(guò),那是理想狀態(tài),事實(shí)上偶欠著的事情挺多,盡力看看……)

嗯,其實(shí)PS中的話才是最主要的……

讓繪制的Java文本框響應(yīng)輸入法事件


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 久久99精品久久久久子伦 | 精品免费tv久久久久久久 | 亚洲国内 | 久久国产热这里只有精品8 久久国产三级 | 日日操夜夜操天天操 | 免费a级毛片在线播放 | 日本欧美一区二区三区在线 | 一级毛片免费播放 | 日韩久久久精品首页 | 亚洲成人免费视频在线 | 99热久久这里只有精品6 | 性视频一区二区三区免费 | 97视频久久 | 欧美性猛交xxxx免费看久久久 | 99久久做夜夜爱天天做精品 | 久久综合国产 | 国产不卡影院 | 久久艹免费视频 | 很很操很很日 | 性大特级毛片视频 | 亚洲图片欧美在线 | 成人亚洲欧美日韩中文字幕 | 久久精品国产亚洲综合色 | 国产成人99精品免费视频麻豆 | 天天插天天射天天干 | 91精品日韩 | www.奇米第四色 | 国产精品一级香蕉一区 | 欧美 日韩 国产在线 | 九九亚洲精品 | 欧美精品一区二区三区观 | 天天干天天操天天爱 | 天上人间影院久久国产 | 欧美一级中文字幕 | 劲爆激情欧美毛片 | 亚洲小视频在线观看 | 天堂网一区二区 | 国产极品福利视频在线观看 | 日韩 在线视频精品 | 四虎永久在线日韩精品观看 | aaaaa级毛片|