比如在界面上添加一个JTextField(其它文本组件也一样),运行程序,当用搜狗拼音等输入法在该文本组件中输入文字时,java会默认弹出一个“输入窗口”,该输入窗口显示的内容其实与输入法工具跳出的输入窗口显示的内容一样,这样一来连同输入法自带的输入窗口,就有呢两个输入窗口了,感觉很尴尬,因为java跳出的“输入窗口”异常简洁难看,而且似乎也没有任何用途。不知能否将java跳出的这个“输入窗口”屏蔽?
望高手指点!!!
望高手指点!!!
解决方案 »
- 如何加入多线程?
- 求一个CODE,
- JBuilder 高手求解来 问题求解。。。
- javamail的sendmail问题553 Requested action not taken: address blocked
- .java加上package名就不识别了??
- 郁闷了!Jnative调用dll错误,Not found the kernel library...
- 为什么java中一个文件中的几个类编译后会变成几个.class文件?
- 网站发布的问题?????
- 请教各位,如何在java应用程序中播放声音文件阿,不是在applet中?在线等
- 求 一段代码!
- 表单提交数据时,有表记录出错,在线等
- JTextField & JTextArea 输入中文时会出现一个多余的浮动窗口
记得以前用C++的时候没有这个吧,应该不是windows问题。
import javax.swing.WindowConstants;public class InputTest extends javax.swing.JFrame
{
private JTextField textField; public static void main(String [] args)
{
InputTest inst = new InputTest();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
} public InputTest()
{
super();
initGUI();
} private void initGUI()
{
try
{
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
{
textField = new JTextField();
getContentPane().add(textField);
textField.setBounds(91, 126, 217, 28);
}
pack();
setSize(400, 300);
}
catch (Exception e)
{
e.printStackTrace();
}
}}
http://topic.csdn.net/u/20090712/19/d46be24f-04ee-43cc-9abf-a4506d39a879.htmljohn_sheep说的很对:
这个小窗口是JAVA为了适应各个国家的语言输入做的一个东西。
反正是看着不爽。而且在使用智能拼音这类输入法时,输入过多的字符,会引发虚拟机的崩溃。楼主可以亲自试试。
而且这个东西跟jdk,jre的版本有关系,某些jdk,jre版本在使用过程中就不会出现,某些会出现。你可以选择使用awt,这样就不会有那个输入窗口。
然后你也可以这么试试public class MyTextField extends javax.swing.JTextField {
public InputMethodRequests getInputMethodRequests() {
return null;
}
}
这样也是会隐藏起来。
但是这样做,不能确定会不会对你的程序带来什么?比如不稳定或是其他什么问题。所以使用起来需要谨慎。
由于外观问题我项目中考虑使用第二种方案
希望你再次感谢 john_sheep 呵呵
由于外观问题我项目中考虑使用第二种方案
希望你再次感谢 john_sheep 呵呵
* 以下方法用于解决java中输入法出现多余的输入窗口问题
*
* 方法1 在命令行中加入参数
* java -Djava.awt.im.style=no-spot 这样不需要改程序,是个比较完善的解决方法。
*
* 方法2 直接设置系统参数
* 在main()函数中加入
*
* System.setProperty( "java.awt.im.style", "no-spot" );
*
* 方法3通过反射修改类的static 字段
* try {
* Class iClass = Class.forName("sun.awt.im.InputMethodContext");
*
* Field field = iClass.getDeclaredField("belowTheSpotInputRequested");
* AccessibleObject.setAccessible(new AccessibleObject[] { field }, true);
* field.setBoolean(null, false);
* } catch (SecurityException e) {
* e.printStackTrace();
* } catch (NoSuchFieldException e) {
* e.printStackTrace();
* } catch (ClassNotFoundException e) {
* e.printStackTrace();
* } catch (IllegalArgumentException e) {
* e.printStackTrace();
* } catch (IllegalAccessException e) {
* e.printStackTrace();
* }
*
*/