比如在界面上添加一个JTextField(其它文本组件也一样),运行程序,当用搜狗拼音等输入法在该文本组件中输入文字时,java会默认弹出一个“输入窗口”,该输入窗口显示的内容其实与输入法工具跳出的输入窗口显示的内容一样,这样一来连同输入法自带的输入窗口,就有呢两个输入窗口了,感觉很尴尬,因为java跳出的“输入窗口”异常简洁难看,而且似乎也没有任何用途。不知能否将java跳出的这个“输入窗口”屏蔽?
    望高手指点!!!

解决方案 »

  1.   

    我觉得这不是java的问题 而是windows的问题。
      

  2.   

    这是swing的问题,好像去不掉吧,上次就有人问这个问题。不用强调是搜狗输入法,中文输入法都是这样
      

  3.   

    确实不是搜狗输入法的问题,所有的中文输入法都这样。
    记得以前用C++的时候没有这个吧,应该不是windows问题。
      

  4.   

    写了个简单的示例:package swingTest;import javax.swing.JTextField;
    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();
    }
        }}
      

  5.   

    嗯 我以前发过同样的帖子
    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; 
        }
    }
    这样也是会隐藏起来。
    但是这样做,不能确定会不会对你的程序带来什么?比如不稳定或是其他什么问题。所以使用起来需要谨慎。
      

  6.   

    谢谢 melody1128 
    由于外观问题我项目中考虑使用第二种方案
    希望你再次感谢 john_sheep 呵呵
      

  7.   

    谢谢 melody1128 
    由于外观问题我项目中考虑使用第二种方案
    希望你再次感谢 john_sheep 呵呵
      

  8.   

    在main函数中System.setProperty("java.awt.im.style","on-the-spot");
      

  9.   

    /*
     * 以下方法用于解决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();
     * }
     * 
     */