Class InlineEditor
- java.lang.Object
-
- java.awt.Component
-
- java.awt.Container
-
- javax.swing.JComponent
-
- javax.swing.JPanel
-
- adams.gui.core.BasePanel
-
- adams.gui.goe.InlineEditor
-
- All Implemented Interfaces:
PopupMenuCustomizer<BasePanel>,CustomStringRepresentationHandler,MultiSelectionEditor,PropertyPanel.PopupMenuCustomizer,ImageObserver,MenuContainer,PropertyChangeListener,PropertyEditor,Serializable,EventListener,Accessible
public class InlineEditor extends BasePanel implements PropertyEditor, CustomStringRepresentationHandler, PropertyPanel.PopupMenuCustomizer, PropertyChangeListener, MultiSelectionEditor
Support for inline editing of editors that support this, in order to reduce number of clicks/dialogs required to enter a value.- Author:
- FracPete (fracpete at waikato dot ac dot nz)
- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class javax.swing.JPanel
JPanel.AccessibleJPanel
-
Nested classes/interfaces inherited from class javax.swing.JComponent
JComponent.AccessibleJComponent
-
Nested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainer
-
Nested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
-
-
Field Summary
Fields Modifier and Type Field Description protected BaseButtonm_ButtonEditorthe button for bringing up the custom editor.protected Colorm_DefaultBackgroundthe default background color of the panel.protected PropertyEditorm_EditorThe property editor.protected HashSet<PropertyChangeListener>m_PropertyChangeListenersthe property change listeners.protected PropertySheetPanelm_PropertySheetPanelwhether the editor is located in a PropertySheetPanel.protected BaseTextFieldm_TextFieldthe text field.protected booleanm_UpdateTextAfterDisplaywhether to update the text after the actual editor was displayed.-
Fields inherited from class adams.gui.core.BasePanel
m_FileChooser
-
Fields inherited from class javax.swing.JComponent
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
accessibleContext, 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
Constructors Constructor Description InlineEditor(PropertyEditor pe)Sets up the editing component with the supplied editor.InlineEditor(PropertyEditor pe, PropertySheetPanel panel)Sets up the editing component with the supplied editor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddPropertyChangeListener(PropertyChangeListener listener)Register a listener for the PropertyChange event.voidcustomizePopupMenu(BasePanel owner, JPopupMenu menu)For customizing the popup menu.ObjectfromCustomStringRepresentation(String str)Returns an object created from the custom string representation.StringgetAsText()Gets the property value as text.ComponentgetCustomEditor()A PropertyEditor may choose to make available a full custom Component that edits its property value.PropertyEditorgetEditor()Returns the editor in use.InlineEditorSupportgetInlineEditor()Returns the inline editor.StringgetJavaInitializationString()Returns a fragment of Java code that can be used to set a property to match the editors current state.Object[]getSelectedObjects(Container parent)Returns the selected objects.String[]getTags()If the property value must be one of a set of known tagged values, then this method should return an array of the tags.intgetTextColumns()Returns the number of columns of the text field.ObjectgetValue()Gets the property value.protected voidindicateValidity()Updates the color of the border, indicating with RED if the input is invalid.protected voidinitGUI()Initializes the widgets.protected voidinitialize()Initializes the members.booleanisPaintable()Determines whether this property editor is paintable.protected booleanisValid(String s)Checks whether the string is valid.protected voidnotifyPropertyChangeListeners()Notifies the listeners.voidpaintValue(Graphics gfx, Rectangle box)Paint a representation of the value into a given area of screen real estate.voidpropertyChange(PropertyChangeEvent evt)This method gets called when a bound property is changed.voidremovePropertyChangeListener(PropertyChangeListener listener)Remove a listener for the PropertyChange event.voidsetAsText(String text)Set the property value by parsing a given String.voidsetTextColumns(int value)Sets the number of columns for the text field.voidsetToolTipText(String value)Registers the text to display in a tool tip of the text field as well.voidsetValue(Object value)Set (or change) the object that is to be edited.protected voidshowEditor()Displays ther actual editor.booleansupportsCustomEditor()Determines whether this property editor supports a custom editor.StringtoCustomStringRepresentation(Object obj)Returns a custom string representation of the object.voidupdate()Updates the text field with the current value of the editor.protected voidupdatePreferredSize()Updates the preferred size of the panel.protected booleanupdateText(String s)Sets the string in the text field only if valid, otherwise the current inline value is used to up the text field.-
Methods inherited from class adams.gui.core.BasePanel
afterHide, afterShow, beforeHide, beforeShow, closeParent, finishInit, getParentChild, getParentDialog, getParentFrame, getParentInternalFrame, getParentTitle, initFileChooser, main, printErrorMessage, printException, saveComponent, setEnabledCascade, setEnabledCascade, setParentTitle, setVisible
-
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, getBaseline, getBaselineResizeBehavior, 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, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, 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, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, 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, 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, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, 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, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
-
-
-
-
Field Detail
-
m_TextField
protected BaseTextField m_TextField
the text field.
-
m_ButtonEditor
protected BaseButton m_ButtonEditor
the button for bringing up the custom editor.
-
m_PropertySheetPanel
protected PropertySheetPanel m_PropertySheetPanel
whether the editor is located in a PropertySheetPanel.
-
m_Editor
protected PropertyEditor m_Editor
The property editor.
-
m_DefaultBackground
protected Color m_DefaultBackground
the default background color of the panel.
-
m_PropertyChangeListeners
protected HashSet<PropertyChangeListener> m_PropertyChangeListeners
the property change listeners.
-
m_UpdateTextAfterDisplay
protected boolean m_UpdateTextAfterDisplay
whether to update the text after the actual editor was displayed.
-
-
Constructor Detail
-
InlineEditor
public InlineEditor(PropertyEditor pe)
Sets up the editing component with the supplied editor.- Parameters:
pe- the PropertyEditor
-
InlineEditor
public InlineEditor(PropertyEditor pe, PropertySheetPanel panel)
Sets up the editing component with the supplied editor.- Parameters:
pe- the PropertyEditorpanel- the ProperySheetPanel
-
-
Method Detail
-
initialize
protected void initialize()
Initializes the members.- Overrides:
initializein classBasePanel
-
getEditor
public PropertyEditor getEditor()
Returns the editor in use.- Returns:
- the editor
-
getInlineEditor
public InlineEditorSupport getInlineEditor()
Returns the inline editor.- Returns:
- the editor
-
showEditor
protected void showEditor()
Displays ther actual editor.
-
isValid
protected boolean isValid(String s)
Checks whether the string is valid.- Parameters:
s- the string to check- Returns:
- true if valid
-
updateText
protected boolean updateText(String s)
Sets the string in the text field only if valid, otherwise the current inline value is used to up the text field.- Parameters:
s- the string to attempt to set- Returns:
- true if successfully set
-
indicateValidity
protected void indicateValidity()
Updates the color of the border, indicating with RED if the input is invalid.
-
setTextColumns
public void setTextColumns(int value)
Sets the number of columns for the text field.- Parameters:
value- the number of columns (>0)
-
getTextColumns
public int getTextColumns()
Returns the number of columns of the text field.- Returns:
- the number of columns (>0)
-
updatePreferredSize
protected void updatePreferredSize()
Updates the preferred size of the panel.
-
update
public void update()
Updates the text field with the current value of the editor.
-
toCustomStringRepresentation
public String toCustomStringRepresentation(Object obj)
Returns a custom string representation of the object.- Specified by:
toCustomStringRepresentationin interfaceCustomStringRepresentationHandler- Parameters:
obj- the object to turn into a string- Returns:
- the string representation
-
fromCustomStringRepresentation
public Object fromCustomStringRepresentation(String str)
Returns an object created from the custom string representation.- Specified by:
fromCustomStringRepresentationin interfaceCustomStringRepresentationHandler- Parameters:
str- the string to turn into an object- Returns:
- the object
-
customizePopupMenu
public void customizePopupMenu(BasePanel owner, JPopupMenu menu)
For customizing the popup menu.- Specified by:
customizePopupMenuin interfacePopupMenuCustomizer<BasePanel>- Specified by:
customizePopupMenuin interfacePropertyPanel.PopupMenuCustomizer- Parameters:
owner- the property panel from where the menu originatesmenu- the menu to customize
-
setValue
public void setValue(Object value)
Set (or change) the object that is to be edited. Primitive types such as "int" must be wrapped as the corresponding object type such as "java.lang.Integer".- Specified by:
setValuein interfacePropertyEditor- Parameters:
value- The new target object to be edited. Note that this object should not be modified by the PropertyEditor, rather the PropertyEditor should create a new object to hold any modified value.
-
getValue
public Object getValue()
Gets the property value.- Specified by:
getValuein interfacePropertyEditor- Returns:
- The value of the property. Primitive types such as "int" will be wrapped as the corresponding object type such as "java.lang.Integer".
-
isPaintable
public boolean isPaintable()
Determines whether this property editor is paintable.- Specified by:
isPaintablein interfacePropertyEditor- Returns:
- True if the class will honor the paintValue method.
-
paintValue
public void paintValue(Graphics gfx, Rectangle box)
Paint a representation of the value into a given area of screen real estate. Note that the propertyEditor is responsible for doing its own clipping so that it fits into the given rectangle.If the PropertyEditor doesn't honor paint requests (see isPaintable) this method should be a silent noop.
The given Graphics object will have the default font, color, etc of the parent container. The PropertyEditor may change graphics attributes such as font and color and doesn't need to restore the old values.
- Specified by:
paintValuein interfacePropertyEditor- Parameters:
gfx- Graphics object to paint into.box- Rectangle within graphics object into which we should paint.
-
getJavaInitializationString
public String getJavaInitializationString()
Returns a fragment of Java code that can be used to set a property to match the editors current state. This method is intended for use when generating Java code to reflect changes made through the property editor.The code fragment should be context free and must be a legal Java expression as specified by the JLS.
Specifically, if the expression represents a computation then all classes and static members should be fully qualified. This rule applies to constructors, static methods and non primitive arguments.
Caution should be used when evaluating the expression as it may throw exceptions. In particular, code generators must ensure that generated code will compile in the presence of an expression that can throw checked exceptions.
Example results are:
- Primitive expresssion:
2 - Class constructor:
new java.awt.Color(127,127,34) - Static field:
java.awt.Color.orange - Static method:
javax.swing.Box.createRigidArea(new java.awt.Dimension(0, 5))
- Specified by:
getJavaInitializationStringin interfacePropertyEditor- Returns:
- a fragment of Java code representing an initializer for the
current value. It should not contain a semi-colon
('
;') to end the expression.
- Primitive expresssion:
-
getAsText
public String getAsText()
Gets the property value as text.- Specified by:
getAsTextin interfacePropertyEditor- Returns:
- The property value as a human editable string.
Returns null if the value can't be expressed as an editable string.
If a non-null value is returned, then the PropertyEditor should be prepared to parse that string back in setAsText().
-
setAsText
public void setAsText(String text) throws IllegalArgumentException
Set the property value by parsing a given String. May raise java.lang.IllegalArgumentException if either the String is badly formatted or if this kind of property can't be expressed as text.- Specified by:
setAsTextin interfacePropertyEditor- Parameters:
text- The string to be parsed.- Throws:
IllegalArgumentException
-
getTags
public String[] getTags()
If the property value must be one of a set of known tagged values, then this method should return an array of the tags. This can be used to represent (for example) enum values. If a PropertyEditor supports tags, then it should support the use of setAsText with a tag value as a way of setting the value and the use of getAsText to identify the current value.- Specified by:
getTagsin interfacePropertyEditor- Returns:
- The tag values for this property. May be null if this property cannot be represented as a tagged value.
-
getCustomEditor
public Component getCustomEditor()
A PropertyEditor may choose to make available a full custom Component that edits its property value. It is the responsibility of the PropertyEditor to hook itself up to its editor Component itself and to report property value changes by firing a PropertyChange event.The higher-level code that calls getCustomEditor may either embed the Component in some larger property sheet, or it may put it in its own individual dialog, or ...
- Specified by:
getCustomEditorin interfacePropertyEditor- Returns:
- A java.awt.Component that will allow a human to directly edit the current property value. May be null if this is not supported.
-
supportsCustomEditor
public boolean supportsCustomEditor()
Determines whether this property editor supports a custom editor.- Specified by:
supportsCustomEditorin interfacePropertyEditor- Returns:
- True if the propertyEditor can provide a custom editor.
-
addPropertyChangeListener
public void addPropertyChangeListener(PropertyChangeListener listener)
Register a listener for the PropertyChange event. When a PropertyEditor changes its value it should fire a PropertyChange event on all registered PropertyChangeListeners, specifying the null value for the property name and itself as the source.- Specified by:
addPropertyChangeListenerin interfacePropertyEditor- Overrides:
addPropertyChangeListenerin classContainer- Parameters:
listener- An object to be invoked when a PropertyChange event is fired.
-
removePropertyChangeListener
public void removePropertyChangeListener(PropertyChangeListener listener)
Remove a listener for the PropertyChange event.- Specified by:
removePropertyChangeListenerin interfacePropertyEditor- Overrides:
removePropertyChangeListenerin classComponent- Parameters:
listener- The PropertyChange listener to be removed.
-
notifyPropertyChangeListeners
protected void notifyPropertyChangeListeners()
Notifies the listeners.
-
propertyChange
public void propertyChange(PropertyChangeEvent evt)
This method gets called when a bound property is changed.- Specified by:
propertyChangein interfacePropertyChangeListener- Parameters:
evt- A PropertyChangeEvent object describing the event source and the property that has changed.
-
getSelectedObjects
public Object[] getSelectedObjects(Container parent)
Returns the selected objects.- Specified by:
getSelectedObjectsin interfaceMultiSelectionEditor- Parameters:
parent- the parent container- Returns:
- the objects
-
setToolTipText
public void setToolTipText(String value)
Registers the text to display in a tool tip of the text field as well.- Overrides:
setToolTipTextin classJComponent- Parameters:
value- the string to display; if the text isnull, the tool tip is turned off for this component
-
-