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 BaseButton
m_ButtonEditor
the button for bringing up the custom editor.protected Color
m_DefaultBackground
the default background color of the panel.protected PropertyEditor
m_Editor
The property editor.protected HashSet<PropertyChangeListener>
m_PropertyChangeListeners
the property change listeners.protected PropertySheetPanel
m_PropertySheetPanel
whether the editor is located in a PropertySheetPanel.protected BaseTextField
m_TextField
the text field.protected boolean
m_UpdateTextAfterDisplay
whether 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 void
addPropertyChangeListener(PropertyChangeListener listener)
Register a listener for the PropertyChange event.void
customizePopupMenu(BasePanel owner, JPopupMenu menu)
For customizing the popup menu.Object
fromCustomStringRepresentation(String str)
Returns an object created from the custom string representation.String
getAsText()
Gets the property value as text.Component
getCustomEditor()
A PropertyEditor may choose to make available a full custom Component that edits its property value.PropertyEditor
getEditor()
Returns the editor in use.InlineEditorSupport
getInlineEditor()
Returns the inline editor.String
getJavaInitializationString()
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.int
getTextColumns()
Returns the number of columns of the text field.Object
getValue()
Gets the property value.protected void
indicateValidity()
Updates the color of the border, indicating with RED if the input is invalid.protected void
initGUI()
Initializes the widgets.protected void
initialize()
Initializes the members.boolean
isPaintable()
Determines whether this property editor is paintable.protected boolean
isValid(String s)
Checks whether the string is valid.protected void
notifyPropertyChangeListeners()
Notifies the listeners.void
paintValue(Graphics gfx, Rectangle box)
Paint a representation of the value into a given area of screen real estate.void
propertyChange(PropertyChangeEvent evt)
This method gets called when a bound property is changed.void
removePropertyChangeListener(PropertyChangeListener listener)
Remove a listener for the PropertyChange event.void
setAsText(String text)
Set the property value by parsing a given String.void
setTextColumns(int value)
Sets the number of columns for the text field.void
setToolTipText(String value)
Registers the text to display in a tool tip of the text field as well.void
setValue(Object value)
Set (or change) the object that is to be edited.protected void
showEditor()
Displays ther actual editor.boolean
supportsCustomEditor()
Determines whether this property editor supports a custom editor.String
toCustomStringRepresentation(Object obj)
Returns a custom string representation of the object.void
update()
Updates the text field with the current value of the editor.protected void
updatePreferredSize()
Updates the preferred size of the panel.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.-
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:
initialize
in 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:
toCustomStringRepresentation
in 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:
fromCustomStringRepresentation
in 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:
customizePopupMenu
in interfacePopupMenuCustomizer<BasePanel>
- Specified by:
customizePopupMenu
in 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:
setValue
in 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:
getValue
in 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:
isPaintable
in 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:
paintValue
in 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:
getJavaInitializationString
in 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:
getAsText
in 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:
setAsText
in 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:
getTags
in 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:
getCustomEditor
in 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:
supportsCustomEditor
in 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:
addPropertyChangeListener
in interfacePropertyEditor
- Overrides:
addPropertyChangeListener
in 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:
removePropertyChangeListener
in interfacePropertyEditor
- Overrides:
removePropertyChangeListener
in 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:
propertyChange
in 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:
getSelectedObjects
in 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:
setToolTipText
in classJComponent
- Parameters:
value
- the string to display; if the text isnull
, the tool tip is turned off for this component
-
-