Package de.sciss.gui
Class PrefComboBox
- java.lang.Object
-
- java.awt.Component
-
- java.awt.Container
-
- javax.swing.JComponent
-
- javax.swing.JComboBox
-
- de.sciss.gui.PrefComboBox
-
- All Implemented Interfaces:
DynamicListening,LaterInvocationManager.Listener,PreferenceEntrySync,java.awt.event.ActionListener,java.awt.image.ImageObserver,java.awt.ItemSelectable,java.awt.MenuContainer,java.io.Serializable,java.util.EventListener,java.util.prefs.PreferenceChangeListener,javax.accessibility.Accessible,javax.swing.event.ListDataListener
public class PrefComboBox extends javax.swing.JComboBox implements DynamicListening, java.util.prefs.PreferenceChangeListener, LaterInvocationManager.Listener, PreferenceEntrySync
Equips a normal JComboBox with preference storing / recalling capabilities. To preserve maximum future compatibility, we decided to not override setSelectedItem() and the like but to install an internal ActionListener. Thus, there are two ways to alter the gadget state, either by invoking the setSelectedIndex/Item() methods or by changing the associated preferences. The whole mechanism would be much simpler if we reduced listening to the preference changes, but a) this wouldn't track user GUI activities, b) the PrefComboBox can be used with preferences set to null. When a preference change occurs, the setSelectedItem() method is called, allowing clients to add ActionListeners to the gadget in case they don't want to deal with preferences. However, when possible it is recommended to use PreferenceChangeListener mechanisms.- See Also:
PreferenceChangeListener,StringItem, Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class javax.swing.JComboBox
javax.swing.JComboBox.AccessibleJComboBox, javax.swing.JComboBox.KeySelectionManager
-
Nested classes/interfaces inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
-
-
Field Summary
Fields Modifier and Type Field Description protected booleanwritePrefs-
Fields inherited from class javax.swing.JComboBox
actionCommand, dataModel, editor, isEditable, keySelectionManager, lightWeightPopupEnabled, maximumRowCount, renderer, selectedItemReminder
-
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
-
-
Constructor Summary
Constructors Constructor Description PrefComboBox()Creates a newPrefComboBoxwith default data model and no initial preferences set.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddItem(java.lang.Object item)Because the items in the ComboBox can be naturally moved, added and replaced, it is crucial to have a non-index-based value to store in the preferences.java.lang.StringgetPreferenceKey()Gets the recently set preference keyjava.util.prefs.PreferencesgetPreferenceNode()Gets the recently set preference nodebooleangetReadPrefs()booleangetWritePrefs()voidinsertItemAt(java.lang.Object item, int index)voidlaterInvocation(java.lang.Object o)Called later in the event thread, this passes the object given to the queue methodvoidpreferenceChange(java.util.prefs.PreferenceChangeEvent e)voidreadPrefs()voidsetPreferenceKey(java.lang.String key)voidsetPreferenceNode(java.util.prefs.Preferences prefs)voidsetPreferences(java.util.prefs.Preferences prefs, java.lang.String key)Enables Preferences synchronization.voidsetReadPrefs(boolean b)voidsetWritePrefs(boolean b)voidstartListening()will be called when the component becomes visiblevoidstopListening()will be called when the component is hiddenvoidwritePrefs()-
Methods inherited from class javax.swing.JComboBox
actionPerformed, actionPropertyChanged, addActionListener, addItemListener, addPopupMenuListener, configureEditor, configurePropertiesFromAction, contentsChanged, createActionPropertyChangeListener, createDefaultKeySelectionManager, fireActionEvent, fireItemStateChanged, firePopupMenuCanceled, firePopupMenuWillBecomeInvisible, firePopupMenuWillBecomeVisible, getAccessibleContext, getAction, getActionCommand, getActionListeners, getEditor, getItemAt, getItemCount, getItemListeners, getKeySelectionManager, getMaximumRowCount, getModel, getPopupMenuListeners, getPrototypeDisplayValue, getRenderer, getSelectedIndex, getSelectedItem, getSelectedObjects, getUI, getUIClassID, hidePopup, installAncestorListener, intervalAdded, intervalRemoved, isEditable, isLightWeightPopupEnabled, isPopupVisible, paramString, processKeyBinding, processKeyEvent, removeActionListener, removeAllItems, removeItem, removeItemAt, removeItemListener, removePopupMenuListener, selectedItemChanged, selectWithKeyChar, setAction, setActionCommand, setEditable, setEditor, setEnabled, setKeySelectionManager, setLightWeightPopupEnabled, setMaximumRowCount, setModel, setPopupVisible, setPrototypeDisplayValue, setRenderer, setSelectedIndex, setSelectedItem, setUI, showPopup, 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, 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, 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, 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
-
-
-
-
Method Detail
-
setReadPrefs
public void setReadPrefs(boolean b)
- Specified by:
setReadPrefsin interfacePreferenceEntrySync
-
getReadPrefs
public boolean getReadPrefs()
- Specified by:
getReadPrefsin interfacePreferenceEntrySync
-
setWritePrefs
public void setWritePrefs(boolean b)
- Specified by:
setWritePrefsin interfacePreferenceEntrySync
-
getWritePrefs
public boolean getWritePrefs()
- Specified by:
getWritePrefsin interfacePreferenceEntrySync
-
addItem
public void addItem(java.lang.Object item)
Because the items in the ComboBox can be naturally moved, added and replaced, it is crucial to have a non-index-based value to store in the preferences. Since the actual String representation of the the items is likely to be locale specific, it is required to add items of class StringItem !- Overrides:
addItemin classjavax.swing.JComboBox- Parameters:
item- theStringItemto add- See Also:
StringItem
-
insertItemAt
public void insertItemAt(java.lang.Object item, int index)- Overrides:
insertItemAtin classjavax.swing.JComboBox
-
writePrefs
public void writePrefs()
- Specified by:
writePrefsin interfacePreferenceEntrySync
-
setPreferenceNode
public void setPreferenceNode(java.util.prefs.Preferences prefs)
- Specified by:
setPreferenceNodein interfacePreferenceEntrySync
-
setPreferenceKey
public void setPreferenceKey(java.lang.String key)
- Specified by:
setPreferenceKeyin interfacePreferenceEntrySync
-
setPreferences
public void setPreferences(java.util.prefs.Preferences prefs, java.lang.String key)Description copied from interface:PreferenceEntrySyncEnables Preferences synchronization. This method is not thread safe and must be called from the event thread. When a preference change is received, the GUI is updated and dispatches an event to registered listeners. Likewise, if the user adjusts the GUI value, the preference will be updated. The same is true, if you call one of the value changing methods.- Specified by:
setPreferencesin interfacePreferenceEntrySync- Parameters:
prefs- the preferences node in which the value is stored, or null to disable prefs sync.key- the key used to store and recall prefs. the value is converted into a string.
-
getPreferenceNode
public java.util.prefs.Preferences getPreferenceNode()
Description copied from interface:PreferenceEntrySyncGets the recently set preference node- Specified by:
getPreferenceNodein interfacePreferenceEntrySync- Returns:
- the node set with setPreferences or null if no prefs were set
-
getPreferenceKey
public java.lang.String getPreferenceKey()
Description copied from interface:PreferenceEntrySyncGets the recently set preference key- Specified by:
getPreferenceKeyin interfacePreferenceEntrySync- Returns:
- the key set with setPreferences or null if no prefs were set
-
startListening
public void startListening()
Description copied from interface:DynamicListeningwill be called when the component becomes visible- Specified by:
startListeningin interfaceDynamicListening
-
stopListening
public void stopListening()
Description copied from interface:DynamicListeningwill be called when the component is hidden- Specified by:
stopListeningin interfaceDynamicListening
-
laterInvocation
public void laterInvocation(java.lang.Object o)
Description copied from interface:LaterInvocationManager.ListenerCalled later in the event thread, this passes the object given to the queue method- Specified by:
laterInvocationin interfaceLaterInvocationManager.Listener- Parameters:
o- object as passed toqueue
-
readPrefs
public void readPrefs()
- Specified by:
readPrefsin interfacePreferenceEntrySync
-
preferenceChange
public void preferenceChange(java.util.prefs.PreferenceChangeEvent e)
- Specified by:
preferenceChangein interfacejava.util.prefs.PreferenceChangeListener
-
-