Hi all,

I am developing a spring rich client application. Within it there are several forms, that contain date fields. With some of the Fields I want to display them in the form of dd.MM.yy in others I want to display them dd.MM.yyyy and within others in the form of dd.MM.yyyy HH:mm.

Now I have searched the forums and read on atlassian that one would have to create his own PropertyEditor. Since I want to use the JCalendar Component, I have tried the example on atlassian.

From that point on, I did not know where to hook the JDateChooserPropertyEditor to my FormFields, so I took of searching the Forum to find things like:

Code:
getFormModel().bind(Date.class, new CustomDateEditor(new SimpleDateFormat("dd.MM.yyyy")))
but this does not seem to work.

here is my form class...

Code:
import javax.swing.JComponent;

import org.springframework.binding.form.FormModel;
import org.springframework.richclient.form.AbstractForm;
import org.springframework.richclient.form.builder.TableFormBuilder;

public class PersonForm extends AbstractForm
{

    public final static String formName = "person.form";

    public PersonForm(FormModel formModel)
    {
        super(formModel, formName);
    }

    protected JComponent createFormControl()
    {
        //        TableFormBuilder formBuilder = new TableFormBuilder(new SwingBindingFactory(getFormModel()));
        TableFormBuilder formBuilder = new TableFormBuilder(getBindingFactory());
        formBuilder.addSeparator("Name");
        formBuilder.row();
        formBuilder.add("firstName");
        formBuilder.add("lastName");
        formBuilder.row();
        formBuilder.add("birthDate");
        formBuilder.row();
        formBuilder.addSeparator("Adresse");
        formBuilder.row();
        formBuilder.add("street");
        formBuilder.row();
        formBuilder.add("zip");
        formBuilder.add("city");
        formBuilder.row();
        formBuilder.addSeparator("Kontaktdaten");
        formBuilder.row();
        formBuilder.add("phone");
        formBuilder.row();
        formBuilder.add("phone2");
        formBuilder.row();
        formBuilder.add("email");
        return formBuilder.getForm();
    }

}
plus another question which constructor is correct? The one creating a new SwingBindingFactory, or getBindingFactory()???

AND another one I have this form on my StartView class, which contains a JSplitPane with a JTree on the Left Side, and the PropertyForm (PersonForm) from above on the right. (added by the Pattern Pete deBruycker suggested).

Now my question is, how would i add the Command Buttons to the Bottom of the Property Panel?

Here is the code for my StartView...

Code:
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Component;
import java.util.Iterator;
import java.util.List;

import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeCellRenderer;

import org.springframework.binding.form.FormModel;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.richclient.application.support.AbstractView;
import org.springframework.richclient.dialog.FormBackedDialogPage;
import org.springframework.richclient.form.FormModelHelper;
import org.springframework.richclient.progress.TreeStatusBarUpdater;
import org.springframework.richclient.tree.FocusableTreeCellRenderer;
import org.springframework.richclient.util.Assert;

import de.byteaction.diamonds.forms.PersonForm;
import de.byteaction.diamonds.mappings.Person;
import de.byteaction.diamonds.mappings.PersonDao;

public class StartView extends AbstractView implements ApplicationListener
{

    private JTree            personTree;

    private PersonDao        personDao;

    private DefaultTreeModel personsTreeModel;

    protected JComponent createControl()
    {
        JPanel treePanel = new JPanel(new BorderLayout());
        formPanel = new JPanel(new CardLayout());
        JSplitPane contentPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
        createOwnerManagerTree();
        JScrollPane sp = new JScrollPane(personTree);
        treePanel.add(sp, BorderLayout.CENTER);
        contentPane.add(treePanel);
        formPanel.add(new JPanel(), "BLANK");
        contentPane.add(formPanel);
        return contentPane;
    }

    private void createOwnerManagerTree()
    {
        DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Personen");
        List persons = personDao.getAll();
        for (Iterator i = persons.iterator(); i.hasNext();)
        {
            Person person = (Person) i.next();
            DefaultMutableTreeNode personNode = new DefaultMutableTreeNode(person);
            rootNode.add(personNode);
        }
        this.personsTreeModel = new DefaultTreeModel(rootNode);
        this.personTree = new JTree(personsTreeModel);
        personTree.setShowsRootHandles(true);
        personTree.addTreeSelectionListener(new TreeStatusBarUpdater(getStatusBar()) {

            public String getSelectedObjectName()
            {
                Person selectedPerson = getSelectedPerson();
                if (selectedPerson != null)
                {
                    FormModel formModel = FormModelHelper.createFormModel(selectedPerson, PersonForm.formName);
                    PersonForm form = new PersonForm(formModel);
                    FormBackedDialogPage page = new FormBackedDialogPage(form);
                    CardLayout cardLayout = (CardLayout) formPanel.getLayout();
                    JPanel panel = new JPanel(new BorderLayout());
                    panel.add(form.getControl(), BorderLayout.CENTER);
                    
                    formPanel.add(panel, "PROPERTIES");
                    cardLayout.show(formPanel, "PROPERTIES");
                    //                    createDialog(selectedPerson);
                    return selectedPerson.getFirstName() + " " + selectedPerson.getLastName() + " " + selectedPerson.getPhone() + " " + selectedPerson.getPhone2();
                }
                else
                {
                    CardLayout cardLayout = (CardLayout) formPanel.getLayout();
                    cardLayout.show(formPanel, "BLANK");
                    return "Personen";
                }
            }

            private void createDialog(Person selectedPerson)
            {
                FormModel formModel = FormModelHelper.createFormModel(selectedPerson, PersonForm.formName);
                PersonForm form = new PersonForm(formModel);

                //                FormBackedDialogPage page = new FormBackedDialogPage(form);
                //
                //                TitledPageApplicationDialog dialog = new TitledPageApplicationDialog(page, getWindowControl()) {
                //
                //                    protected void onAboutToShow()
                //                    {
                //                        //                        setEnabled(compositePage.isPageComplete());
                //                    }
                //
                //                    protected boolean onFinish()
                //                    {
                //                        //                        ownerFormModel.commit();
                //                        //                        clinic.storeOwner(owner);
                //                        //                        ownersTreeModel.nodeChanged(getSelectedOwnerNode());
                //                        return true;
                //                    }
                //                };
                //                dialog.showDialog();
            }
        });
        personTree.addTreeSelectionListener(new TreeSelectionListener() {

            public void valueChanged(TreeSelectionEvent e)
            {
                //                updateCommands();
            }
        });
        //        personTree.addMouseListener(new PopupMenuMouseListener() {
        //            protected boolean onAboutToShow(MouseEvent e) {
        //                return !isRootOrNothingSelected();
        //            }
        //
        //            protected JPopupMenu getPopupMenu() {
        //                return getSelectedOwner() != null ? createOwnerPopupContextMenu() : createPetPopupContextMenu();
        //            }
        //        });
        //        ownersTree.addMouseListener(new MouseAdapter() {
        //            public void mouseClicked(MouseEvent e) {
        //                if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1 && propertiesExecutor.isEnabled()) {
        //                    propertiesExecutor.execute();
        //                }
        //            }
        //        });
        personTree.setCellRenderer(getTreeCellRenderer());
        personTree.setRootVisible(true);
    }

    public void onApplicationEvent(ApplicationEvent event)
    {
        // TODO Auto-generated method stub

    }

    public void setPerson(PersonDao dao)
    {
        Assert.notNull(dao, "We need a Person Dao");
        personDao = dao;
    }

    private Person getSelectedPerson()
    {
        DefaultMutableTreeNode node = getSelectedPersonNode();
        if (node != null)
        {
            return (Person) node.getUserObject();
        }
        else
        {
            return null;
        }
    }

    private DefaultMutableTreeNode getSelectedPersonNode()
    {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) personTree.getLastSelectedPathComponent();
        if (node == null || !(node.getUserObject() instanceof Person))
        {
            return null;
        }
        else
        {
            return node;
        }
    }

    private DefaultTreeCellRenderer treeCellRenderer = new FocusableTreeCellRenderer() {

                                                         public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus)
                                                         {
                                                             super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
                                                             DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
                                                             if (node.isRoot())
                                                             {
                                                                 this.setIcon(getIconSource().getIcon("group.folder.icon"));
                                                             }
                                                             else
                                                             {
                                                                 Object userObject = node.getUserObject();
                                                                 if (userObject instanceof Person)
                                                                 {
                                                                     Person o = (Person) userObject;
                                                                     this.setText(o.getFirstName() + " " + o.getLastName());
                                                                     this.setIcon(getIconSource().getIcon("person.bullet"));
                                                                 }
                                                                 //                                                                 else if (userObject instanceof Pet)
                                                                 //                                                                 {
                                                                 //                                                                     Pet p = (Pet) userObject;
                                                                 //                                                                     this.setText&#40;"<html>" + p.getName&#40;&#41; + " <i>&#40;" + p.getType&#40;&#41;.getName&#40;&#41; + "&#41;"&#41;;
                                                                 //                                                                     this.setIcon&#40;getIconSource&#40;&#41;.getIcon&#40;"pet.bullet"&#41;&#41;;
                                                                 //                                                                 &#125;
                                                             &#125;
                                                             return this;
                                                         &#125;
                                                     &#125;;

    private JPanel                  formPanel;

    public TreeCellRenderer getTreeCellRenderer&#40;&#41;
    &#123;
        return treeCellRenderer;
    &#125;

&#125;
Any Help is highly appreciated...