Package selector
Class SelectionComponent
java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
selector.SelectionComponent
- All Implemented Interfaces:
MouseListener,MouseMotionListener,ImageObserver,MenuContainer,PropertyChangeListener,Serializable,EventListener
public class SelectionComponent
extends JComponent
implements MouseListener, MouseMotionListener, PropertyChangeListener
A transparent (overlay) component enabling interactive selection (aka "tracing") of an underlying
image. Layout must ensure that our upper-left corner coincides with that of the underlying image
view.
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class javax.swing.JComponent
JComponent.AccessibleJComponentNested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainerNested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy -
Field Summary
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_WINDOWFields inherited from class java.awt.Component
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENTFields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH -
Constructor Summary
ConstructorsConstructorDescriptionSelectionComponent(SelectionModel model) Construct a new SelectionComponent that will participate in viewing and controlling the selection modeled by `model`. -
Method Summary
Modifier and TypeMethodDescriptiongetModel()Return the selection model currently being viewed and controlled by this component.voidWhen mouse button 1 is clicked and a selection has either not yet been started or is still in progress, add the location of the point to the selection.voidWhen a selection is in progress, or when we are interacting with a control point, update our last-observed mouse location to the location of this event and repaint ourselves to draw a "live wire" to the mouse pointer.voidvoidvoidWhen a selection is in progress, update our last-observed mouse location to the location of this event and repaint ourselves to draw a "live wire" to the mouse pointer.voidWhen mouse button 1 is pressed while our model's selection is complete, search for a control point close to the mouse pointer and, if found, start interacting with that point.voidWhen mouse button 1 is released while we are interacting with a control point, move the selected point to the current mouse location.voidVisualize our model's state, as well as our interaction state, by drawing our view using `g`.voidRepaint to update our view in response to any property changes from our model.voidsetModel(SelectionModel newModel) Have this component view and control `newModel` instead of whichever model it was using previously.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, getUI, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, paramString, 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, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update, updateUIMethods 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, validateTreeMethods 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, getAccessibleContext, 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
-
Constructor Details
-
SelectionComponent
Construct a new SelectionComponent that will participate in viewing and controlling the selection modeled by `model`. View will update upon receiving property change events from `model`.
-
-
Method Details
-
setModel
Have this component view and control `newModel` instead of whichever model it was using previously. This component will no longer react to events from the old model. If a point from the previous selection was being moved, that interaction is discarded. -
getModel
Return the selection model currently being viewed and controlled by this component. -
paintComponent
Visualize our model's state, as well as our interaction state, by drawing our view using `g`.- Overrides:
paintComponentin classJComponent
-
mouseClicked
When mouse button 1 is clicked and a selection has either not yet been started or is still in progress, add the location of the point to the selection. Note: `mousePressed()` and `mouseReleased()` handle presses of button 1 when the selection is finished.When mouse button 2 is clicked and a selection is in progress, finish the selection.
When mouse button 3 is clicked and a selection is either in progress or finished, undo the last point added to the selection.
- Specified by:
mouseClickedin interfaceMouseListener
-
mouseMoved
When a selection is in progress, update our last-observed mouse location to the location of this event and repaint ourselves to draw a "live wire" to the mouse pointer.- Specified by:
mouseMovedin interfaceMouseMotionListener
-
mouseDragged
When a selection is in progress, or when we are interacting with a control point, update our last-observed mouse location to the location of this event and repaint ourselves to draw a "live wire" to the mouse pointer. (Note that mouseMoved events are not sent while dragging, which is why this overlaps with the duties of that handler.)- Specified by:
mouseDraggedin interfaceMouseMotionListener
-
mousePressed
When mouse button 1 is pressed while our model's selection is complete, search for a control point close to the mouse pointer and, if found, start interacting with that point. A point is only eligible for interaction if the mouse was pressed within the circle representing it in the view.- Specified by:
mousePressedin interfaceMouseListener
-
mouseReleased
When mouse button 1 is released while we are interacting with a control point, move the selected point to the current mouse location.- Specified by:
mouseReleasedin interfaceMouseListener
-
propertyChange
Repaint to update our view in response to any property changes from our model. Additionally, if the "image" property changed, update our preferred size to match the new image size.- Specified by:
propertyChangein interfacePropertyChangeListener
-
mouseEntered
- Specified by:
mouseEnteredin interfaceMouseListener
-
mouseExited
- Specified by:
mouseExitedin interfaceMouseListener
-