Validating On Key Typed Example
/* Code revised from Desktop Java Live: http://www.sourcebeat.com/downloads/ */ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import com.jgoodies.binding.PresentationModel; import com.jgoodies.binding.adapter.BasicComponentFactory; import com.jgoodies.binding.value.ValueModel; import com.jgoodies.forms.builder.DefaultFormBuilder; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; import com.jgoodies.validation.ValidationCapable; import com.jgoodies.validation.ValidationResult; import com.jgoodies.validation.util.DefaultValidationResultModel; import com.jgoodies.validation.util.ValidationResultModel; import com.jgoodies.validation.util.ValidationUtils; import com.jgoodies.validation.view.ValidationResultViewFactory; public class ValidatingOnKeyTypedExample extends JPanel { private Feed feed; private FeedPresentationModel feedPresentationModel; public ValidatingOnKeyTypedExample() { DefaultFormBuilder formBuilder = new DefaultFormBuilder(new FormLayout("right:pref, 3dlu, p:g")); formBuilder.setDefaultDialogBorder(); createFeed(); this.feedPresentationModel = new FeedPresentationModel(this.feed); ValueModel nameModel = this.feedPresentationModel.getModel("name"); ValueModel feedModel = this.feedPresentationModel.getModel("feedUrl"); ValueModel siteModel = this.feedPresentationModel.getModel("siteUrl"); JTextField nameField = BasicComponentFactory.createTextField(nameModel, false); JTextField feedField = BasicComponentFactory.createTextField(feedModel, false); JTextField siteField = BasicComponentFactory.createTextField(siteModel, false); formBuilder.append("Name:", nameField); formBuilder.append("Site Url:", siteField); formBuilder.append("Feed Url:", feedField); JComponent validationResultsComponent = ValidationResultViewFactory.createReportList(this.feedPresentationModel.getValidationModel()); formBuilder.appendRow("top:30dlu:g"); CellConstraints cc = new CellConstraints(); formBuilder.add(validationResultsComponent, cc.xywh(1, formBuilder.getRow() + 1, 3, 1, "fill, fill")); add(formBuilder.getPanel()); } private void createFeed() { this.feed = new Feed(); this.feed.setName("ClientJava.com"); this.feed.setSiteUrl("http://www.clientjava.com/blog"); this.feed.setFeedUrl("http://www.clientjava.com/blog/rss.xml"); } private class FeedPresentationModel extends PresentationModel implements ValidationCapable { private ValidationResultModel validationResultModel; public FeedPresentationModel(Object bean) { super(bean); this.validationResultModel = new DefaultValidationResultModel(); initEventHandling(); } public ValidationResultModel getValidationModel() { return this.validationResultModel; } public ValidationResult validate() { ValidationResult validationResult = new ValidationResult(); String name = (String) getModel("name").getValue(); String feedUrl = (String) getModel("feedUrl").getValue(); String siteUrl = (String) getModel("siteUrl").getValue(); if (ValidationUtils.isEmpty(name)) { validationResult.addError("The name field can not be blank."); } else if (!ValidationUtils.hasBoundedLength(name, 5, 14)) { validationResult.addError("The name field must be between 5 and 14 characters."); } if (!"ClientJava.com".equals(name)) { validationResult.addWarning("This form prefers the feed ClientJava.com"); } if (ValidationUtils.isEmpty(feedUrl)) { validationResult.addError("The feed field can not be blank."); } if (ValidationUtils.isEmpty(siteUrl)) { validationResult.addError("The site field can not be blank."); } return validationResult; } private void initEventHandling() { PropertyChangeListener handler = new ValidationUpdateHandler(); addBeanPropertyChangeListener(handler); getBeanChannel().addValueChangeListener(handler); } // Event Handling ********************************************************* class ValidationUpdateHandler implements PropertyChangeListener { public void propertyChange(PropertyChangeEvent evt) { updateValidationResult(); } private void updateValidationResult() { ValidationResult result = validate(); getValidationModel().setResult(result); } } } public static void main(String[] a){ JFrame f = new JFrame("Validation on Key Typed Example"); f.setDefaultCloseOperation(2); f.add(new ValidatingOnKeyTypedExample()); f.pack(); f.setVisible(true); } }