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:
but this does not seem to work.Code:getFormModel().bind(Date.class, new CustomDateEditor(new SimpleDateFormat("dd.MM.yyyy")))
here is my form class...
plus another question which constructor is correct? The one creating a new SwingBindingFactory, or getBindingFactory()???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(); } }
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...
Any Help is highly appreciated...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("<html>" + p.getName() + " <i>(" + p.getType().getName() + ")"); // this.setIcon(getIconSource().getIcon("pet.bullet")); // } } return this; } }; private JPanel formPanel; public TreeCellRenderer getTreeCellRenderer() { return treeCellRenderer; } }


Reply With Quote
and the solution was easier, than of what I would have thought...