Date Format Control within Forms
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("<html>" + p.getName() + " <i>(" + p.getType().getName() + ")");
// this.setIcon(getIconSource().getIcon("pet.bullet"));
// }
}
return this;
}
};
private JPanel formPanel;
public TreeCellRenderer getTreeCellRenderer()
{
return treeCellRenderer;
}
}
Any Help is highly appreciated...