JtextField с проверкой данных и привязкой Beansbinding
Я пытаюсь связать поле JText с проверкой текста, а затем связать его с моделью pojo. Моя цель - позволить пользователю набирать определенный набор допустимых символов с определенной длиной текста и задавать текст в модели с помощью привязки. Фрагмент кода приведен ниже.
открытый класс TestValidationBinding { приватное поле JTextField; частное ModelVo modelVo; public TestValidationBinding() { field = new JTextField(); modelVo = new ModelVo(); field.setDocument(new PlainDocument() { приватный статический финал long serialVersionUID = 1L; @Override public void insertString(int offs, String str, AttributeSet a) выдает BadLocationException { // другая проверка для ввода ключа, проверка длины int limit = 15; if (str == null) { вернуть; } if ((getLength() + str.length()) <= limit) { super.insertString(offs, str, a); } } }); Свойство srcProperty = BeanProperty.create("текст"); Свойство tgtProperty = BeanProperty.create("текст"); AutoBinding Binding = Bindings .createAutoBinding(UpdateStrategy.READ_WRITE, поле, srcProperty, modelVo, tgtProperty); binding.bind(); } }
Класс ModelVO:
открытый класс ModelVo { приватный текст String; public String getText() { вернуть текст; } public void setText(String text) { System.out.println("Текст есть:" + текст); this.text = text; } }
Я использую AspectJ для запуска необходимых изменений свойств в классе ModalVO. (перешли по этой ссылке, чтобы добиться этого: http://yakafokon.wordpress.com/2008/12/02/beans-binding-jsr-295-with-pojo-and-aop/).
Теперь моя проблема в том, что если я не использую привязку, проверка выполняется правильно, но текст не установлен в модальном режиме. Но если я связываю текстовое поле, текст в модели устанавливается правильно, но проверка не работает. Может ли кто-нибудь объяснить, почему он не работает, когда я использую и проверку, и привязку?
2 ответа
Попробуй использовать javax.swing.text.DocumentFilter
вместо того, чтобы продлить PlainDocument
,
Попробуй переопределить replace
метод вместо insertString
если вы используете привязку.