jTextField.getDocument().addDocumentListener(按你的需要你自己做成的listener)就是这么加的。不过new DocumentListener()这里是让你添加一个监听器。DocumentListener本身只是一个interface,你要自己继承他做一个class才行监听器应该加过吧?比如给鼠标事件加一个监听器,道理是一样的。

解决方案 »

  1.   

    谢谢!我现在是这么写的(我不明白DocumentListener接口中各方法的意义就把各方法都写成了一样的功能):    
    jTextField.getDocument().addDocumentListener(new DocumentListener(){
          public void insertUpdate(DocumentEvent e){
            jTextField.setText("");
          }
          public void removeUpdate(DocumentEvent e){
            jTextField.setText("");
          }
          public void changedUpdate(DocumentEvent e){
            jTextField.setText("");
          }
     });可是每次当运行完insertUpdate()方法中的jTextField.setText("");的时候都会跳出一个“stopped in class with tracing disabled”的错误提示框。请问该怎么办?谢谢!
      

  2.   

    其实我不明白Document这个接口的意义。
      

  3.   

    private void attachFocusListener()
        {
          addFocusListener(new FocusListener()
          {
            public void focusGained(FocusEvent e)
            {
              setClear(true);
            }
            public void focusLost(FocusEvent e)
            {
              setClear(false);
            }
          }
          );
        }
            private void setClear(boolean clear)
        {
          Document doc = getDocument();
          if(doc != null && (doc instanceof jTextField))
          {
            ((jTextField)doc).setClear(clear);
          }
        }
      

  4.   

    谢谢!
    cyouryuu兄:如果我没理解错的话你的意思是当jTextField获得焦点的时候就清空之,可是我的意思是当jTextField中原先显示的文本被改变的时候才清空之啊。
    另外,我不明白你写的setClear(boolean clear)方法中的Document doc = getDocument();这句是什么意思,也就是getDocument();是谁的方法?得到的Document变量代表了什么信息?
    谢谢!
      

  5.   

    logic error
    If you doing like this, nobody can input text.
    everytime when you input/delete/change the text, a DocumentEvent will be generated, related handler is called, and you reset the text to "". 
      

  6.   

    唉,这个问题真是头痛!
    谢谢楼上各位兄弟的指教。
    我干脆说我的最终目的吧!
    是这样,我想用jTextField给用户提供一个编辑字符串的地方,我先让此jTextField显示一个供他参考的初始值,但这个值不允许他编辑(因为这个字符串并不是用户直接输入的,而是通过一系列的用户操作步骤自动生成的,在生成过程中要记录许多相关信息,所以不能允许用户直接编辑最终结果,但上次生成的最终结果可以显示出来供他参考),也就是说,要么他就原封不动地选用初始值,要么他就把jTextField清空输入新值,但如果变化不大一般人都有对原字符串进行修改后使用的习惯,为了强制实现我的目的,我就想到了当用户第一次编辑字符串的时候就自动把jTextField清空,然后他才能输入新值。
    不知道我说明白了没有,或者有没有更好的方法实现我的意图。
    请大家指教!
    严重感谢!
      

  7.   

    add a flag there and init to false
    boolean changed=false;when user first time changes the textfield,
    ...
    if(!changed){
        setText="";
        changed=true;
    }next time do nothing 
      

  8.   

    谢谢wobelisk兄!
    那如何监视jTextField中文本的变化呢?
      

  9.   

    谢谢楼上兄弟!
    校验恐怕不行吧?因为标准不好定啊。
    我现在只要知道怎么能监视jTextField中文本的变化就行了,请高手就此指点一下。
    谢谢!
      

  10.   

    加DocumentListener的思路没错,关键是处理同步问题。因为DocumentListener检测到DocumentEvent 时,文档内容正在变化,文档会被当前线程锁定,这时去setText="" 会引起同步问题,导致不可mutation的异常。
    解决办法一是自己写线程同步。
    二是利用大多数JVM 处理 AWTEvent 的特性。大多数JVM一次处理一个Event, 保证了无冲突。利用这一点,可以在DocumentListener 方法中产生 AWTEvent 对象,然后在processEvent() 中检测和处理,如setText="".
    不用我写Code了巴。说的这么清楚了。我还要忙着找工作呢。