在任何一款桌面应用中,都难免会遇到让用户输入文字或者特殊字符的情况发生,所以输入法的支持与文本框组件的存在就变得必不可少。
由于Java具有桌面应用开发能力,它的图形组件中也当然配备有文本框,因而无论是继承自TextComponent的Text系组件抑或继承自JTextComponent的JText系组件都提供了让用户输入数据的功能。
现在的疑问是,虽然TextComponent与JTextComponent相类似,但两者的父类却并不同级。TextComponent直接继承自Component,但Component已经是所有Java图形组件的公共父类,JTextComponent的父类JComponent却继承自Container,而Container的父类才是Component。
为什么会这样呢?如果JTextComponent直接继承TextComponent难道不好吗?没错,不好,或者说不能。除了Swing与AWT运行原理造成的差异与组件关系的统一性需求外,造成这样情况的理由中还有一点至关重要,那就是不光JTextComponent不能,即便我们想在java.awt包外重载TextComponent也不能。原因在于,虽然TextComponent类并非final,但它的唯一构造函数却是default的,这意味着即便不同包中的类继承了它,也不能构造,根本无法重载。
更何况,就算可以重载的JTextComponent,也与TextComponent一样存在着一些很麻烦的默认配置问题(就更不要说重载JTextField抑或TextField了)。最主要的是,用它们制作标准文本框固然游刃有余,但如果我们需要的文本框不那么标准,甚至需要某些“奇形怪状”到只要求输入文字,但根本就算不上文本框的组件时,那么它们势必更加捉襟见肘。
那么,我们要怎样才能满足这种近乎于“变态”的要求呢?
很简单,自己“画”个文本框出来就好了,因为是“画”的,所以想它怎样,便是怎样,因为是凭空绘制,也没有利用现成Swing组件绘制时的不便。
所以能这样做,就在于Java获得输入法支持的关键点不在TextComponent与JTextComponent,而是java.awt.im包下的相关组件,更具体地说,只要你实现了InputMethodListener与InputMethodRequests两尊大神,那么所有Component都可以支持输入法,又何必专情于TextComponent与JTextComponent?
闲话少说,现在我就直接用Canvas来“画”个文本框,给大家瞧瞧。
TextCanvas.java
运行效果如下图:
怎么样?这时你在TextCanvas中进行输入操作,是不是与JTextField或TextField里相差无几呢?——什么?你说就算“重复发明轮子”也应该有个限度,已经有JTextField与TextField了,你再写一个有什么用?
嗯,您很聪明,单纯的绘制文本框确实没有任何意义,但是,如果有一系列直接通过AWT绘制的组件与其相呼应呢?——比如,偶在LGame-Simple中制作的那一系列UI组件……
那么事情,就会变成如下这个样子。
怎么样呢?如上图所示,这是一个纯绘制的界面,无论文本框的字体,大小,颜色乃至透明度,贴图都可以随性切换(甚至逆天的将两个文本框叠在一起也可以), 而这样一个纯绘制出的文本框能够获得输入法支持,意味着什么呢?这意味着,一个相对于Swing能耗更少,效率更高的类Swing体系已经搭建成型了!(当然,相对的功能也更少,不过事无两利嘛……)
PS:如上所述,LGame-Simple-0.2.5版Text系组件将获得输入法支持,中文或其它语言的输入已经没有任何问题。(此版预计同Android版LGame一道于12月中下旬发布……不过,那是理想状态,事实上偶欠着的事情挺多,尽力看看……)
嗯,其实PS中的话才是最主要的……
分享到:
相关推荐
Java图像绘制Java图像绘制Java图像绘制vvvJava图像绘制Java图像绘制Java图像绘制Java图像绘制Java图像绘制Java图像绘制Java图像绘制Java图像绘制Java图像绘制Java图像绘制Java图像绘制Java图像绘制
在JavaMe连载(3)-也说MVC设计模式 一文中提到了一个TextEdit类,但没有给出具体实现,TextEdit是采用GameCanvas绘制的文本编辑器。本文结合实例给出实现的方法。
绘制阶跃响应曲线的matlab程序,在自控、信号处理等课程中往往可能会用到,比较通俗易懂,方便学习~重新更新了一下资源,可以直接运行,这次注释得很详细!之前下载的同学请重新下载,谢谢!
此程序利用高德地图,绘制自己的地图和地图响应事件。
适合初学者的一个简单java图片绘制和鼠标事件监听小代码!
MFC绘制直线,矩形,文本框 调试过的,可以直接运行啦
自定义view(自动滚动文本框),AlwaysMarqueeTextView.java,复制到项目工程中即可使用
java绘图 绘制椭圆java绘图 绘制椭圆java绘图 绘制椭圆
绘制的雪人是动态旋转效果,可以依据键盘响应事件,将动画效果做出改变,该实验内容中,按‘a’键可以绕y轴旋转,按‘d’键可以绕z轴旋转,按‘s’轴可以绕x轴旋转,按‘w’键可以进行光照渲染,按‘q’键...
matlab绘制频谱图,可以绘制FIR滤波器的频率响应
java绘制图表(柱状图、饼图、折线图)包, jfreechart
java_在窗体中绘制图形.
7. 编写Java程序,创建一个窗体,并实现交互。在窗体内“单击鼠标左键”,在光标处绘制一个“绿圆”;窗体内“单击鼠标右键”,在光标处绘制一个“红色方框”;窗体内“双击鼠标左键”,清空所有已画“圆”和“方”
基于C#开发的将文本框或者外部记事本 的字符串用GDI技术绘制成可以自动根据自身大小换行的程序,可以直接用vs打开执行的源码
java图形处理及鼠标事件处理, 资源描述 资源描述 资源描述
1. 绘制方块:在鼠标任意键被按下时,绘制一个正方形。 2. 改变指针状态:当鼠标指针移动至图形内部时,指针变为十字形状,移出方块时,指针恢复。 3. 拖动方块:当鼠标指针移至图形内部,按下任意键,拖动指针时,...
JAVA绘制函数图像工具,学校的一个java大作业
java高级图像绘制方法与实现源码,很好的
图形学课程设计基于四叉树的颜色填充等值线图绘制java实现
使用jdk的绘图工具来绘制印章,该代码中只绘制了圆形印章,印章中的内容包括公司名称、中间的五角星以及印章的类型