Orbital library

orbital.moon.awt
Class DefaultCustomizer

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.JPanel
                  extended by orbital.moon.awt.DefaultCustomizer
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.beans.Customizer, java.io.Serializable, javax.accessibility.Accessible

public class DefaultCustomizer
extends javax.swing.JPanel
implements java.beans.Customizer

Provides a fully-automatic generic JavaBean customizer. This customizer is displaying fields according to the introspection of the target class revealing all bean properties. Thereby, it provides average complexity customizers for all beans, automatically, without a need for programming by hand.

For PropertyEditors that support a custom editor, this customizer supports an extra method in the PropertyEditor implementation. If it exists, the method of the signature

    boolean isInlineCustomEditor()
 
is used to tell whether a custom editor wants to be inlined. If this method returns false, any custom editors are displayed in an exterior dialog upon user request. If it returns true, custom editors will be displayed inline. If this method does not exist, the size of the custom editor is used to determine a sufficient behaviour instead.

Author:
André Platzer
See Also:
CustomizerViewController, CustomizerViewController.customizerFor(Class), Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JPanel
javax.swing.JPanel.AccessibleJPanel
 
Nested classes/interfaces inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
protected  java.lang.Class beanClass
          for which class this customizer is intended.
protected  java.beans.PropertyDescriptor[] beanProperties
          list of bean properties.
protected  java.awt.Component[] propertyEditorComponents
          list of visual editor components for bean properties.
protected  java.beans.PropertyEditor[] propertyEditors
          list of property editors for bean properties.
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
protected DefaultCustomizer()
          Create a default customizer that is not yet initialized to a bean class.
  DefaultCustomizer(java.lang.Class beanClass)
          Create a default customizer initialized to customize a bean class.
 
Method Summary
 void addPropertyChangeListener(java.beans.PropertyChangeListener listener)
           
protected  java.awt.Component createPropertyEditorComponent(java.beans.PropertyDescriptor property, java.beans.PropertyEditor peditor)
          Create a component to use as an editor for the property specified.
protected static boolean customizerForProperty(java.beans.PropertyDescriptor property)
          Checks whether we find a customizer for the type of the property specified.
protected  java.beans.PropertyDescriptor[] getAllPropertyDescriptors(java.beans.BeanInfo info)
          Get all PropertyDescriptors from the BeanInfo including its additonal BeanInfos.
 java.lang.Class getBeanClass()
          get the class of the bean this customizer is responsible for.
protected  java.beans.BeanInfo getBeanInfo(java.lang.Class cls)
          Get the BeanInfo of a class.
protected  java.lang.Object getObject()
          Get the object currently customized.
protected static java.beans.PropertyEditor getPropertyEditor(java.beans.PropertyDescriptor property)
          Get a property editor for the property specified.
 int getTruncation()
           
 void init(java.lang.Class beanClass)
          Initializes default customizer view according to the BeanInfo of the given object.
protected  void registerPropertyChangeUpdater(java.beans.PropertyDescriptor property, java.beans.PropertyEditor peditor, java.awt.Component propertyEditorComponent)
          Register to property change events of the property editor.
 void removePropertyChangeListener(java.beans.PropertyChangeListener listener)
           
 void setEditable(boolean editable)
          write-through editable to all content property editor components.
 void setEnabled(boolean enabled)
          write-through to enable or disable all content property editor components.
 void setObject(java.lang.Object bean)
          Set the object to be customized now.
 void setSpacing(boolean value)
          Whether or not to put spacing (additional insets) between property fields.
 void setTruncation(int truncateAfter)
           
protected  void update(java.lang.Object bean)
          Update all values displayed for the given bean.
 
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

beanClass

protected java.lang.Class beanClass
for which class this customizer is intended.


beanProperties

protected java.beans.PropertyDescriptor[] beanProperties
list of bean properties. same order as propertyEditors and propertyEditorComponents.


propertyEditors

protected java.beans.PropertyEditor[] propertyEditors
list of property editors for bean properties. same order as beanProperties.


propertyEditorComponents

protected java.awt.Component[] propertyEditorComponents
list of visual editor components for bean properties. same order as beanProperties.

Constructor Detail

DefaultCustomizer

public DefaultCustomizer(java.lang.Class beanClass)
                  throws java.beans.IntrospectionException
Create a default customizer initialized to customize a bean class.

Throws:
java.beans.IntrospectionException
See Also:
CustomizerViewController.customizerFor(Class), init(Class)

DefaultCustomizer

protected DefaultCustomizer()
                     throws java.beans.IntrospectionException
Create a default customizer that is not yet initialized to a bean class.

In order to use a default customizer created this way, you need to call init(Class) explicitly, first.

Throws:
java.beans.IntrospectionException
See Also:
CustomizerViewController.customizerFor(Class), init(Class)
Method Detail

getBeanClass

public java.lang.Class getBeanClass()
get the class of the bean this customizer is responsible for.


getTruncation

public int getTruncation()

setTruncation

public void setTruncation(int truncateAfter)

setSpacing

public void setSpacing(boolean value)
Whether or not to put spacing (additional insets) between property fields. Default is disabled.

Parameters:
value - true to enable, false to disable

setEnabled

public void setEnabled(boolean enabled)
write-through to enable or disable all content property editor components.

Overrides:
setEnabled in class javax.swing.JComponent
Note:
lightweight components used as property editor components usually won't support enabling or disabling.

setEditable

public void setEditable(boolean editable)
write-through editable to all content property editor components. Components that don't support a writable editable property will instead have setEnabled(boolean) called.


init

public void init(java.lang.Class beanClass)
          throws java.beans.IntrospectionException
Initializes default customizer view according to the BeanInfo of the given object. Will add a property sheet to this DefaultCustomizer panel.

Parameters:
beanClass - for which class of objects this customizer is intended.
Throws:
java.beans.IntrospectionException

createPropertyEditorComponent

protected java.awt.Component createPropertyEditorComponent(java.beans.PropertyDescriptor property,
                                                           java.beans.PropertyEditor peditor)
                                                    throws java.beans.IntrospectionException
Create a component to use as an editor for the property specified.

If a special system-default display component is used, a listener to that component updating the property editor will have been set as well. It is set to a listener that forwards the display component-specific event to a generic property change event of the PropertyEditor.

Throws:
java.beans.IntrospectionException
See Also:
PropertyEditor.isPaintable(), PropertyEditor.supportsCustomEditor(), PropertyEditor.getTags(), DefaultCustomizer.PropertyEditingChange, Factory Method

registerPropertyChangeUpdater

protected void registerPropertyChangeUpdater(java.beans.PropertyDescriptor property,
                                             java.beans.PropertyEditor peditor,
                                             java.awt.Component propertyEditorComponent)
Register to property change events of the property editor.

Register a property updater updating the bean's property specified in the property descriptor with the values of the given property editor on changes.

This central method can be overwritten to implement

Parameters:
property - descriptor of the property to update. Usage of property is both, get and set.
peditor - the property editor to set and get the values from. Its getValue() method is considered for the value to set for the bean's property. Usage of peditor is read-only.
propertyEditorComponent - visual editor component for property.

customizerForProperty

protected static boolean customizerForProperty(java.beans.PropertyDescriptor property)
Checks whether we find a customizer for the type of the property specified.

See Also:
BeanDescriptor.getCustomizerClass()

getPropertyEditor

protected static java.beans.PropertyEditor getPropertyEditor(java.beans.PropertyDescriptor property)
                                                      throws java.beans.IntrospectionException
Get a property editor for the property specified.

Throws:
java.beans.IntrospectionException
See Also:
PropertyDescriptor.getPropertyEditorClass(), PropertyEditorManager.findEditor(Class)

getObject

protected java.lang.Object getObject()
Get the object currently customized.

Returns:
the bean object currently customized, as set in the last call to setObject(Object).
See Also:
setObject(Object)

setObject

public void setObject(java.lang.Object bean)
Set the object to be customized now.

Specified by:
setObject in interface java.beans.Customizer
Parameters:
bean - the bean object to be customized. Requires bean to be the kind of type specified in the constructor. null will clear all values displayed.

update

protected void update(java.lang.Object bean)
               throws java.beans.IntrospectionException
Update all values displayed for the given bean. Gets all property values from the bean, and set representation for their property editor and property editor component.

Throws:
java.beans.IntrospectionException

getBeanInfo

protected java.beans.BeanInfo getBeanInfo(java.lang.Class cls)
                                   throws java.beans.IntrospectionException
Get the BeanInfo of a class.

Throws:
java.beans.IntrospectionException
See Also:
Introspector.getBeanInfo(Class, int)

getAllPropertyDescriptors

protected java.beans.PropertyDescriptor[] getAllPropertyDescriptors(java.beans.BeanInfo info)
Get all PropertyDescriptors from the BeanInfo including its additonal BeanInfos.

See Also:
BeanInfo.getAdditionalBeanInfo()

addPropertyChangeListener

public void addPropertyChangeListener(java.beans.PropertyChangeListener listener)
Specified by:
addPropertyChangeListener in interface java.beans.Customizer
Overrides:
addPropertyChangeListener in class java.awt.Container

removePropertyChangeListener

public void removePropertyChangeListener(java.beans.PropertyChangeListener listener)
Specified by:
removePropertyChangeListener in interface java.beans.Customizer
Overrides:
removePropertyChangeListener in class java.awt.Component

Orbital library
1.3.0: 11 Apr 2009

Copyright © 1996-2009 André Platzer
All Rights Reserved.