001 package org.springframework.richclient.samples.showcase.binding; 002 003 import com.jgoodies.forms.layout.CellConstraints; 004 import com.jgoodies.forms.layout.FormLayout; 005 import org.springframework.richclient.application.ApplicationServicesLocator; 006 import org.springframework.richclient.command.ActionCommand; 007 import org.springframework.richclient.command.config.CommandConfigurer; 008 import org.springframework.richclient.dialog.TitledApplicationDialog; 009 import org.springframework.richclient.form.AbstractForm; 010 import org.springframework.richclient.form.FormModelHelper; 011 import org.springframework.richclient.form.binding.swing.TextComponentBinder; 012 import org.springframework.richclient.form.binding.swing.text.RegExDocumentFactory; 013 import org.springframework.richclient.form.builder.TableFormBuilder; 014 015 import javax.swing.*; 016 import java.util.Collections; 017 018 /** 019 * This dialog shows how the {@link org.springframework.richclient.form.binding.swing.TextComponentBinder} can be used to create 020 * a binding with a specific {@link javax.swing.text.Document} as model behind the {@link javax.swing.JTextField}. 021 * 022 * @author Jan Hoskens 023 */ 024 public class DocumentBindingDialog extends TitledApplicationDialog { 025 026 class StringValues { 027 028 String regExp = "[0-9A-z]"; 029 030 boolean convertToUppercase = false; 031 032 String value; 033 034 public String getValue() { 035 return value; 036 } 037 038 public void setValue(String value) { 039 this.value = value; 040 } 041 042 public String getRegExp() { 043 return regExp; 044 } 045 046 public void setRegExp(String regExp) { 047 this.regExp = regExp; 048 } 049 050 public boolean isConvertToUppercase() { 051 return convertToUppercase; 052 } 053 054 public void setConvertToUppercase(boolean convertToUppercase) { 055 this.convertToUppercase = convertToUppercase; 056 } 057 058 } 059 060 private class ParentForm extends AbstractForm { 061 private final JPanel childPanel = new JPanel(new FormLayout("fill:default:grow","fill:default:grow")); 062 063 public ParentForm() { 064 super(FormModelHelper.createFormModel(new StringValues())); 065 } 066 067 @Override 068 protected JComponent createFormControl() { 069 JPanel panel = new JPanel(new FormLayout("fill:default:grow","default, 4dlu, default, 4dlu, 30dlu:grow")); 070 TableFormBuilder builder = new TableFormBuilder(getBindingFactory()); 071 builder.add("regExp"); 072 builder.row(); 073 builder.add("convertToUppercase"); 074 CellConstraints cc = new CellConstraints(); 075 panel.add(builder.getForm(), cc.xy(1,1)); 076 panel.add(createBuildBindingCommand().createButton(), cc.xy(1,3)); 077 panel.add(childPanel, cc.xy(1,5)); 078 return panel; 079 } 080 081 private ActionCommand createBuildBindingCommand() { 082 ActionCommand actionCommand = new ActionCommand("buildBinding"){ 083 protected void doExecuteCommand() { 084 String pattern = (String)getValue("regExp"); 085 boolean upperCaseOnly = (Boolean) getValue("convertToUppercase"); 086 CellConstraints cc = new CellConstraints(); 087 ChildForm form = new ChildForm(pattern, upperCaseOnly); 088 childPanel.removeAll(); 089 childPanel.add(form.getControl(), cc.xy(1,1)); 090 childPanel.revalidate(); 091 092 } 093 }; 094 ((CommandConfigurer) ApplicationServicesLocator.services().getService(CommandConfigurer.class)) 095 .configure(actionCommand); 096 return actionCommand; 097 } 098 099 private class ChildForm extends AbstractForm { 100 101 final String pattern; 102 103 final boolean upperCaseOnly; 104 105 public ChildForm(String pattern, boolean upperCaseOnly) { 106 super(FormModelHelper.createFormModel(new StringValues())); 107 this.pattern = pattern; 108 this.upperCaseOnly = upperCaseOnly; 109 } 110 111 protected JComponent createFormControl() { 112 TableFormBuilder builder = new TableFormBuilder(getBindingFactory()); 113 TextComponentBinder binder = new TextComponentBinder(); 114 binder.setDocumentFactory(new RegExDocumentFactory(pattern, upperCaseOnly)); 115 builder.add(binder.bind(getFormModel(), "value", Collections.emptyMap()), "rowSpec=fill:default:grow"); 116 return builder.getForm(); 117 } 118 } 119 } 120 121 @Override 122 protected JComponent createTitledDialogContentPane() { 123 return (new ParentForm()).getControl(); 124 } 125 126 @Override 127 protected boolean onFinish() { 128 return true; 129 } 130 }