XP中java swing 在中文输入的时候总有一个输入窗口,非常难看,可以采用此种方法处理
2012-05-24 08:40
477 查看
java Swing 里面的文本框在输入的时候会弹出一个“输入窗口”,这个窗口让人看起来很不爽,而且有如下几个bug:
1. 在某些版本的jvm下,有很多层的模式对话框的时候,最上面正在使用模式对话框可能会被隐藏,导致找不到该对话框。
2. 在该“输入窗口”输入太多字符会导致jvm崩溃
有什么好的办法去掉这个“输入窗口”呢。
其实这个问题出在jre rt.jar 中的sun.awt.im.InputMethodContext类
该类中有个 private static boolean belowTheSpotInputRequested;属性 尝试用xjad反编译该类我们可以看到以下代码:
static
{
String s = (String)AccessController.doPrivileged(new GetPropertyAction("java.awt.im.style", null));
if (s == null)
{
Toolkit.getDefaultToolkit();
s = Toolkit.getProperty("java.awt.im.style", null);
}
belowTheSpotInputRequested = "below-the-spot".equals(s);
}
因为系统缺省的style属性是“below-the-spot” 所以会导致belowTheSpotInputRequested=true; 就会导致输入中文时出现小窗口
所以解决的办法
1.是在main函数中System.setProperty("java.awt.im.style","on-the-spot");
2.将belowTheSpotInputRequested直接设置为false,编译后放入rt.jar中即可
1. 在某些版本的jvm下,有很多层的模式对话框的时候,最上面正在使用模式对话框可能会被隐藏,导致找不到该对话框。
2. 在该“输入窗口”输入太多字符会导致jvm崩溃
有什么好的办法去掉这个“输入窗口”呢。
其实这个问题出在jre rt.jar 中的sun.awt.im.InputMethodContext类
该类中有个 private static boolean belowTheSpotInputRequested;属性 尝试用xjad反编译该类我们可以看到以下代码:
static
{
String s = (String)AccessController.doPrivileged(new GetPropertyAction("java.awt.im.style", null));
if (s == null)
{
Toolkit.getDefaultToolkit();
s = Toolkit.getProperty("java.awt.im.style", null);
}
belowTheSpotInputRequested = "below-the-spot".equals(s);
}
因为系统缺省的style属性是“below-the-spot” 所以会导致belowTheSpotInputRequested=true; 就会导致输入中文时出现小窗口
所以解决的办法
1.是在main函数中System.setProperty("java.awt.im.style","on-the-spot");
2.将belowTheSpotInputRequested直接设置为false,编译后放入rt.jar中即可
相关文章推荐
- Qt中,当QDockWidget的父窗口是一个不可以拖动的QTabWidget的时候实现拖动的方法
- 解析Java中文乱码的处理方法
- java实现数据结构练习题--仅使用处理单个数字的I/O例程,编写一个过程以输出任意实数(可以是负的)
- Java Swing 中三种事件处理方法之比较
- Java中有几种方法可以实现一个线程
- JAVA采用数组结构实现一个线性表,可以增删改查,类似于ArrayList
- Java判断输入的String是否为中文方法总结
- 一个简单的帐号密码输入窗口(JPanel类采用无布局管理)
- 自己实现的一个寻径算法的框架,具体算法采用动态库模式,可以非常方便灵活地尝试多种寻径算法
- java中有几种方法可以实现一个线程?用什么关键字修饰同步
- 在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理。 例如: //实例化一个NSDateFormatter对象 NSDateFor
- 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心, 因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。
- 异或加密法 在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算。 解密的方法就是再执行一次同样的操作。
- 从键盘上输入一个年份,判断是否为闰年方法二(java)
- java中有几种方法可以实现一个线程?
- Java Swing 中三种事件处理方法的比较
- java中如何判断一个数是否为正整数(多种种方式比较有意思)对时间处理也可以
- 中文数字“○”输入方法汇总【xpghost】
- java 面试题 请设计一个方法,可以实现获取任意范围内的随机数
- “static”关键字是什么意思?Java中是否可以覆盖(override)一个private 或者是static的方法?