Component Hints 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.builder.PanelBuilder; 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.PropertyValidationSupport; import com.jgoodies.validation.util.ValidationResultModel; import com.jgoodies.validation.util.ValidationUtils; import com.jgoodies.validation.view.ValidationComponentUtils; import com.jgoodies.validation.view.ValidationResultViewFactory; public class ComponentHintsExample extends JPanel { private Feed feed; private FeedPresentationModel feedPresentationModel; private JPanel panel1; private JPanel panel2; private JPanel panel3; private JComponent iconPanel; private ValidationResultModel validationModel; public ComponentHintsExample() { this.validationModel = new DefaultValidationResultModel(); createFeed(); this.feedPresentationModel = new FeedPresentationModel(this.feed); ValueModel nameModel = this.feedPresentationModel.getModel("name"); DefaultFormBuilder formBuilder1 = new DefaultFormBuilder(new FormLayout("right:pref, 3dlu, p:g")); JTextField nameField1 = BasicComponentFactory.createTextField(nameModel, false); ValidationComponentUtils.setMandatory(nameField1, true); ValidationComponentUtils.setMessageKey(nameField1, "form.name_key"); formBuilder1.append("Name:", nameField1); DefaultFormBuilder formBuilder2 = new DefaultFormBuilder(new FormLayout("right:pref, 3dlu, p:g")); JTextField nameField2 = BasicComponentFactory.createTextField(nameModel, false); ValidationComponentUtils.setMandatory(nameField2, true); ValidationComponentUtils.setMessageKey(nameField2, "form.name_key"); formBuilder2.append("Name:", nameField2); DefaultFormBuilder formBuilder3 = new DefaultFormBuilder(new FormLayout("right:pref, 3dlu, p:g")); JTextField nameField3 = BasicComponentFactory.createTextField(nameModel, false); ValidationComponentUtils.setMandatory(nameField3, true); ValidationComponentUtils.setMessageKey(nameField3, "form.name_key"); formBuilder3.append("Name:", nameField3); DefaultFormBuilder formBuilder4 = new DefaultFormBuilder(new FormLayout("right:pref, 4dlu, p:g")); JTextField nameField4 = BasicComponentFactory.createTextField(nameModel, false); ValidationComponentUtils.setMandatory(nameField4, true); ValidationComponentUtils.setMessageKey(nameField4, "form.name_key"); formBuilder4.append("Name:", nameField4); //Padding for overlay icon formBuilder4.appendRow("5dlu"); this.panel1 = formBuilder1.getPanel(); this.panel2 = formBuilder2.getPanel(); this.panel3 = formBuilder3.getPanel(); this.iconPanel = new IconFeedbackPanel(this.validationModel, formBuilder4.getPanel()); PanelBuilder builder = new PanelBuilder(new FormLayout("p:g")); builder.setDefaultDialogBorder(); builder.appendRow("p"); builder.add(this.panel1); builder.nextLine(); builder.appendRow("p"); builder.add(this.panel2); builder.nextLine(); builder.appendRow("p"); builder.add(this.panel3); builder.nextLine(); builder.appendRow("4dlu"); builder.nextLine(); builder.appendRow("p"); builder.add(this.iconPanel); builder.nextLine(); builder.appendRow("4dlu"); builder.nextLine(); builder.appendRow("p:g"); builder.nextLine(); builder.appendRow("p"); builder.addLabel("Results"); builder.nextLine(); builder.appendRow("50dlu"); builder.add(ValidationResultViewFactory.createReportList(this.validationModel)); add(builder.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"); } public 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() { PropertyValidationSupport support = new PropertyValidationSupport(feed, "form"); String name = (String) getModel("name").getValue(); if (!ValidationUtils.isEmpty(name)) { if (!"ClientJava.com".equals(name)) { support.addWarning("name_key", "is not ClientJava.com"); } if (name.length() < 5) { support.addError("name_key", "must be more than 4 characters long."); } } return support.getResult(); } private void initEventHandling() { PropertyChangeListener handler = new ValueUpdateHandler(); addBeanPropertyChangeListener(handler); getBeanChannel().addValueChangeListener(handler); } public class ValueUpdateHandler implements PropertyChangeListener { public void propertyChange(PropertyChangeEvent evt) { updateComponents(); } private void updateComponents() { ValidationResult result = validate(); validationModel.setResult(result); ValidationComponentUtils.updateComponentTreeMandatoryAndBlankBackground(panel1); ValidationComponentUtils.updateComponentTreeMandatoryBackground(panel2); ValidationComponentUtils.updateComponentTreeMandatoryBorder(panel3); ValidationComponentUtils.updateComponentTreeValidationBackground(panel1, result); } } } public static void main(String[] a){ JFrame f = new JFrame("Component Hints Example"); f.setDefaultCloseOperation(2); f.add(new ComponentHintsExample()); f.pack(); f.setVisible(true); } }