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.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 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
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.void
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.void
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.void
void
void
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.void
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.void
When mouse button 1 is released while we are interacting with a control point, move the selected point to the current mouse location.void
Visualize our model's state, as well as our interaction state, by drawing our view using `g`.void
Repaint to update our view in response to any property changes from our model.void
setModel
(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, updateUI
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, 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:
paintComponent
in 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:
mouseClicked
in 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:
mouseMoved
in 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:
mouseDragged
in 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:
mousePressed
in 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:
mouseReleased
in 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:
propertyChange
in interfacePropertyChangeListener
-
mouseEntered
- Specified by:
mouseEntered
in interfaceMouseListener
-
mouseExited
- Specified by:
mouseExited
in interfaceMouseListener
-