2011-01-21 49 views
0

我想用文本驗證綁定JTextfield,然後將其綁定到pojo模型。我的目標是允許用戶鍵入特定文本長度的某些允許字符集,並使用綁定來設置模型中的文本。代碼片段如下。帶有數據驗證和Beansbinding的JtextField

 
public class TestValidationBinding { 
    private JTextField field; 
    private ModelVo modelVo; 

    public TestValidationBinding() { 
     field = new JTextField(); 
     modelVo = new ModelVo(); 
     field.setDocument(new PlainDocument() { 
      private static final long serialVersionUID = 1L; 

      @Override 
      public void insertString(int offs, String str, AttributeSet a) 
        throws BadLocationException { 
       // other validation for key typing, check length 
       int limit = 15; 
       if (str == null) { 
        return; 
       } 

       if ((getLength() + str.length()) <= limit) { 
        super.insertString(offs, str, a); 
       } 
      } 
     }); 

     Property srcProperty = BeanProperty.create("text"); 
     Property tgtProperty = BeanProperty.create("text"); 
     AutoBinding binding = Bindings 
       .createAutoBinding(UpdateStrategy.READ_WRITE, field, 
         srcProperty, modelVo, tgtProperty); 
     binding.bind(); 

    } 
} 

的ModelVO類是:

 
public class ModelVo { 
    private String text; 

    public String getText() { 
     return text; 
    } 

    public void setText(String text) { 
     System.out.println("Text is:" + text); 
     this.text = text; 
    } 
} 

我使用AspectJ來火在ModalVO類必要的財產變化。 (跟隨此鏈接以實現此目的:: http://yakafokon.wordpress.com/2008/12/02/beans-binding-jsr-295-with-pojo-and-aop/#comments)。

現在,我的問題是,如果我不使用綁定,驗證正確完成,但文本沒有設置爲模態。但是,如果我綁定文本字段,文本將在模型中正確設置,但驗證不起作用。任何人都可以提供見解爲什麼當我同時使用驗證和綁定時它不工作?

問候, GeorgeB

回答

1

嘗試使用javax.swing.text.DocumentFilter代替extendint的PlainDocument

+0

非常感謝你,它工作... – 2011-01-22 13:15:27

1

如果您使用綁定,請嘗試覆蓋replace方法而不是insertString