/* * DateChooserCustomizer.java * * Created on 3 ������ 2006 �., 13:42 * */ package datechooser.beans.customizer; import datechooser.beans.customizer.edit.PropertyCellEditor; import datechooser.beans.customizer.render.CaptionCellRenderer; import datechooser.beans.customizer.render.ValueCellRenderer; import java.awt.*; import java.beans.*; import javax.swing.*; import javax.swing.event.*; /** * Generalized bean customizer. * It need only BeanInfo class. * Looks like it can work with any beans, but it was tested only with * DateChooserXXX components. Supports custom editors. To make your own * customizer class you have to make class extending DateChooserCustomizer with * default constructor.<br> * ���������� ���������� ��� ���������. * ��� ������ ������� ������ �������������� ����� ����������. * ������������ ����� �������� � ������ ������������, �� ������������ ������ �� * �����������, ������������ � ���� �����������. ������ ��������� ���������������� * ����������. ����� ��������� ����� � ������. ��� ����������� ������ ��������� * ������ ����� � �������������� ����������� (����� ��� ����������), ��������� * ������������ ����� ������ ����������� �������������� ����. * @author Androsov Vadim * @since 1.0 * @see datechooser.beans.DateChooserPanelCustomizer * @see datechooser.beans.DateChooserComboCustomizer * @see datechooser.beans.DateChooserDialogCustomizer */ public class DateChooserCustomizer extends JPanel implements Customizer, PropertyChangeListener { private PropertyDescriptorsHolder holder; private JTextArea description; private PropertyChangeSupport changeSupport; private JTable table; /** * Constructor. Your customizer class must have deafult constructor.<br> * �����������. ��� �����-���������� ������ ����� ����������� �� ���������. * @param beanInfo BeanInfo class for bean to customize.<br> * �������������� ���� �������������� ����������. * @since 1.0 */ public DateChooserCustomizer(BeanInfo beanInfo) throws IntrospectionException { changeSupport = new PropertyChangeSupport(this); holder = new PropertyDescriptorsHolder(beanInfo); getHolder().addPropertyChangeListener(this); setLayout(new BorderLayout(2, 2)); description = new JTextArea(""); description.setRows(2); description.setEditable(false); description.setWrapStyleWord(true); description.setLineWrap(true); description.setOpaque(false); table = new JTable(new PropertyTableModel(getHolder())); table.setRowHeight(20); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table.getColumnModel().getColumn(1).setCellEditor(new PropertyCellEditor(getHolder())); table.setDefaultRenderer(CaptionCellRenderer.class, new CaptionCellRenderer(getHolder())); table.setDefaultRenderer(ValueCellRenderer.class, new ValueCellRenderer(getHolder())); table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { updateDescriptor(); } }); add(new JScrollPane(table), BorderLayout.CENTER); add(new JScrollPane(description), BorderLayout.SOUTH); } /** * Get bean information class.<br> * �������� �������������� ����� ����������. * @return BeanInfo class.<br> * �������������� �����. * @since 1.0 */ public BeanInfo getBeanInfo() { return getHolder().getBeanInfo(); } private void updateDescriptor() { PropertyDescriptor propDescr = getHolder().getPropertydescriptor(getSelectedProperty()); String text = propDescr.getShortDescription(); if (text == null) text = propDescr.getDisplayName(); if (text == null) text = propDescr.getName(); description.setText(text); } private String getSelectedProperty() { return (String) table.getValueAt(table.getSelectedRow(), 0); } /** * Sets bean to customize.<br> * ������������� ������������� ���������. * @param bean Bean to customize.<br> * ������������� ���������. * @since 1.0 */ public void setObject(Object bean) { getHolder().prepareForBean(bean); } /** * Get object of PropertyDescriptorsHolder class.<br> * �������� ������ ������ PropertyDescriptorsHolder. * @since 1.0 */ public PropertyDescriptorsHolder getHolder() { return holder; } /** * * @since 1.0 */ public void propertyChange(PropertyChangeEvent evt) { changeSupport.firePropertyChange(evt.getPropertyName(), evt.getOldValue(), evt.getNewValue()); } /** * * @since 1.0 */ public void addPropertyChangeListener(PropertyChangeListener listener) { changeSupport.addPropertyChangeListener(listener); } /** * * @since 1.0 */ public void removePropertyChangeListener(PropertyChangeListener listener) { changeSupport.removePropertyChangeListener(listener); } }