Package de.sciss.gui

Class 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
      • 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.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected boolean writePrefs  
      • 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
      • 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
      PrefComboBox()
      Creates a new PrefComboBox with default data model and no initial preferences set.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      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.
      java.lang.String getPreferenceKey()
      Gets the recently set preference key
      java.util.prefs.Preferences getPreferenceNode()
      Gets the recently set preference node
      boolean getReadPrefs()  
      boolean getWritePrefs()  
      void insertItemAt​(java.lang.Object item, int index)  
      void laterInvocation​(java.lang.Object o)
      Called later in the event thread, this passes the object given to the queue method
      void preferenceChange​(java.util.prefs.PreferenceChangeEvent e)  
      void readPrefs()  
      void setPreferenceKey​(java.lang.String key)  
      void setPreferenceNode​(java.util.prefs.Preferences prefs)  
      void setPreferences​(java.util.prefs.Preferences prefs, java.lang.String key)
      Enables Preferences synchronization.
      void setReadPrefs​(boolean b)  
      void setWritePrefs​(boolean b)  
      void startListening()
      will be called when the component becomes visible
      void stopListening()
      will be called when the component is hidden
      void writePrefs()  
      • 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
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • writePrefs

        protected boolean writePrefs
    • Constructor Detail

      • PrefComboBox

        public PrefComboBox()
        Creates a new PrefComboBox with default data model and no initial preferences set.
    • Method Detail

      • 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:
        addItem in class javax.swing.JComboBox
        Parameters:
        item - the StringItem to add
        See Also:
        StringItem
      • insertItemAt

        public void insertItemAt​(java.lang.Object item,
                                 int index)
        Overrides:
        insertItemAt in class javax.swing.JComboBox
      • setPreferences

        public void setPreferences​(java.util.prefs.Preferences prefs,
                                   java.lang.String key)
        Description copied from interface: PreferenceEntrySync
        Enables 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:
        setPreferences in interface PreferenceEntrySync
        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: PreferenceEntrySync
        Gets the recently set preference node
        Specified by:
        getPreferenceNode in interface PreferenceEntrySync
        Returns:
        the node set with setPreferences or null if no prefs were set
      • getPreferenceKey

        public java.lang.String getPreferenceKey()
        Description copied from interface: PreferenceEntrySync
        Gets the recently set preference key
        Specified by:
        getPreferenceKey in interface PreferenceEntrySync
        Returns:
        the key set with setPreferences or null if no prefs were set
      • preferenceChange

        public void preferenceChange​(java.util.prefs.PreferenceChangeEvent e)
        Specified by:
        preferenceChange in interface java.util.prefs.PreferenceChangeListener