Class JPanelMouse
- All Implemented Interfaces:
com.sun.j3d.utils.behaviors.mouse.MouseBehaviorCallback,ActionListener,FocusListener,ItemListener,KeyListener,MouseListener,MouseMotionListener,ImageObserver,MenuContainer,Serializable,EventListener,Accessible,ChangeListener
- Author:
- Ruida Cheng
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) classChange the name of the selected item in the item list.(package private) classWrapper in order to hold the control panel layout in the JScrollPane.(package private) class* Thread that plays.(package private) classThread that records screen capture.Nested classes/interfaces inherited from class javax.swing.JPanel
JPanel.AccessibleJPanelNested 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
FieldsModifier and TypeFieldDescriptionprivate booleanflag to indicate current mode being changed.private JToggleButtonContinue play button.private MouseEventVectorCurrent event vector used by the save AVI.private Objectcurrent SceneState object being recorded by SaveAVI.private javax.media.j3d.Transform3DCurrent transform3D object used in Save AVI.Vector that holds mouse or change events.private MouseEventVectorGlobal mouse event vector.booleanFlag to indicate first event.private JButtonGo to button.private booleanFlag indicates that arbitrary clipping plane is triggered or not.private booleanFlag to indicating play mouse is running or not.List to record info for each mouse, change events.private JPanelThe main control panel.private floatParam to save AVI.intCurrent mode, init to stop.intMouse event counter.private JButtonSave AVI button .private SurfaceRenderReference to ViewJFrameSurfaceRenderer.private MouseEventVectorUsed by name change dialog to change name of the selected item.private JButtonThis button add at head of the list.private RenderViewBaseParent scene.static final intRecorder/Player is paused.private JToggleButtonPause button.static final intRecorder/Player is playing.private JToggleButtonDisplay button.private JPanelMouse.PlayMouseReference to PlayMouse class object.private intProcess id used by the save AVI.static final intRecorder/Player is recording.private JToggleButtonRecorder button.private JPanelMouse.RecordMouseReference to RecordMouse object class.private JButtonRemove all items in the item list.private JButtonRemove the selected item in the item list.private javax.media.j3d.Transform3DCurrent transform3D object.private JScrollPaneThe scroll pane holding the panel content.private JPanelMouse.DrawingPanelScroll panel that holding the all the control components.private static final longUse serialVersionUID for interoperability.private booleanflag to indicate the first time mouse tranform event happpened.private JPanelSlicesDialog to turn the slices control box on and off.intSlider moves event counter.private JToggleButtonNext step button.static final intRecorder/Player is stopped.private JToggleButtonStop button.private JToolBarTool bar of the mouse recorder.private booleanFlag indicates that a transform changed event is invoked.private JListView list of the mouse recorder display list.Fields inherited from class gov.nih.mipav.view.renderer.J3D.JPanelRendererJ3D
rayBasedRender, renderBaseFields inherited from class gov.nih.mipav.view.renderer.JPanelRendererBase
applyButton, cancelButton, cancelFlag, closeButton, helpButton, isActiveImage, NEW, OKButton, REPLACE, runInSeparateThread, serif12, serif12BFields 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, WIDTHFields inherited from interface com.sun.j3d.utils.behaviors.mouse.MouseBehaviorCallback
ROTATE, TRANSLATE, ZOOM -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidactionPerformed(ActionEvent event) Performs various actions depending on which event triggered this method.private JToolBarBuilds the toolbar for the mouse recorder.voiddispose()Dispose memory.Get the main control panel interface.voidinit()Initializes GUI components.booleanisPaused()Returns whether the mouse recorder is paused.booleanReturns whether the mouse recorder is playing saved events.booleanReturns whether the mouse recorder is recording.booleanReturns whether the mouse recorder is stopped.private voidload()Loads the mouse actions as an object file.voidmouseClicked(MouseEvent event) Unchanged.voidmouseDragged(MouseEvent event) If recording, adds this mouse event to the mouseEvents vector found at locationcurrent.voidmouseEntered(MouseEvent event) Unchanged.voidmouseExited(MouseEvent event) Unchanged.voidmouseMoved(MouseEvent event) Unchanged.voidmousePressed(MouseEvent event) If mode is RECORD_MODE, saves the current view and creates a new MouseEventVector.voidmouseReleased(MouseEvent event) If recording, adds this mouse event to the mouseEvents vector found at locationcurrent.private voidplay(boolean selectedToEnd, boolean forever) If there is no other thread running, starts a new thread to play the mouse events.voidRemoves all the items on the recording list.voidresizePanel(int panelWidth, int frameHeight) Resizig the control panel with ViewJFrameVolumeView's frame width and height.private voidsave()Saves the mouse actions as an object file.private voidsaveAVI()Saves the mouse actions as an AVI file.voidsetup()Sets up variables for recorder.voidsetVisible(boolean status) Makes the dialog visible next to the parent frame.voidSets how the image plane should be displayed depending on value of slider.voidtransformChanged(int type, javax.media.j3d.Transform3D transform) Accessor that lets the dialog know that the canvas transform has changed.Methods inherited from class gov.nih.mipav.view.renderer.J3D.JPanelRendererJ3D
disposeLocal, getSurfaceRender, setRayBasedRender, setSurfaceRenderMethods inherited from class gov.nih.mipav.view.renderer.JPanelRendererBase
buildApplyButton, buildCancelButton, buildCloseButton, buildHelpButton, buildOKButton, buildTitledBorder, finalize, focusGained, focusLost, isCancelled, itemStateChanged, keyPressed, keyReleased, keyTyped, makeString, setLeftHandSystem, setVisibleStandard, setWCSystem, testParameterMethods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUIMethods 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, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, unregisterKeyboardAction, updateMethods 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, 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, transferFocusUpCycleMethods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface java.awt.event.FocusListener
focusGained, focusLostMethods inherited from interface java.awt.event.ItemListener
itemStateChangedMethods inherited from interface java.awt.event.KeyListener
keyPressed, keyReleased, keyTyped
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDUse serialVersionUID for interoperability.- See Also:
-
STOP_MODE
public static final int STOP_MODERecorder/Player is stopped.- See Also:
-
RECORD_MODE
public static final int RECORD_MODERecorder/Player is recording.- See Also:
-
PAUSE_MODE
public static final int PAUSE_MODERecorder/Player is paused.- See Also:
-
PLAY_MODE
public static final int PLAY_MODERecorder/Player is playing.- See Also:
-
events
Vector that holds mouse or change events. -
first
public boolean firstFlag to indicate first event. -
listModel
List to record info for each mouse, change events. -
mode
public int modeCurrent mode, init to stop. -
mouseCount
public int mouseCountMouse event counter. -
sliderCount
public int sliderCountSlider moves event counter. -
changedMode
private boolean changedModeflag to indicate current mode being changed. -
contButton
Continue play button. -
currentEventVector
Current event vector used by the save AVI. -
currentObject
current SceneState object being recorded by SaveAVI. -
currentTransform
private javax.media.j3d.Transform3D currentTransformCurrent transform3D object used in Save AVI. -
eventVector
Global mouse event vector. -
goButton
Go to button. -
isArbitraryRotation
private boolean isArbitraryRotationFlag indicates that arbitrary clipping plane is triggered or not. -
isPlaying
private boolean isPlayingFlag to indicating play mouse is running or not. -
mainPanel
The main control panel. -
mjpegQuality
private float mjpegQualityParam to save AVI. -
movieButton
Save AVI button . -
myParent
Reference to ViewJFrameSurfaceRenderer. -
nameChangeVector
Used by name change dialog to change name of the selected item. -
newButton
This button add at head of the list. -
parentScene
Parent scene. -
pauseButton
Pause button. -
playButton
Display button. -
playMouse
Reference to PlayMouse class object. -
process
private int processProcess id used by the save AVI. -
recordButton
Recorder button. -
recorderToAVI
Reference to RecordMouse object class. -
removeAllButton
Remove all items in the item list. -
removeButton
Remove the selected item in the item list. -
resetTransform
private javax.media.j3d.Transform3D resetTransformCurrent transform3D object. -
scroller
The scroll pane holding the panel content. Useful when the screen is small. -
scrollPanel
Scroll panel that holding the all the control components. -
setMouseVectorFlag
private boolean setMouseVectorFlagflag to indicate the first time mouse tranform event happpened. -
sliceDialog
Dialog to turn the slices control box on and off. -
stepButton
Next step button. -
stopButton
Stop button. -
toolBar
Tool bar of the mouse recorder. -
transformChange
private boolean transformChangeFlag indicates that a transform changed event is invoked. -
viewList
View list of the mouse recorder display list.
-
-
Constructor Details
-
JPanelMouse
Constructs a new mouse recorder dialog. Makes the GUI components and ties them to the parent scene.- Parameters:
parent- Parent scene to tie actions to.
-
-
Method Details
-
actionPerformed
Performs various actions depending on which event triggered this method.Playback toolbar buttons:
- Record button - changes the mode to RECORD_MODE.
- Play button - changes the mode to PLAY_MODE and calls play(boolean, boolean), which plays all the mouse events started at the selected one in a separate thread.
- Play once button - changes the mode to PLAY_MODE and calls play(boolean, boolean), which plays one mouse event (the selected mouse event) in a separate thread.
- Play continuously button - changes the mode to PLAY_MODE and calls play(boolean, boolean), which plays all the mouse events started at the selected one in a separate thread, until the stop button or pause button is pressed.
- Pause button - changes the mode to PAUSE_MODE and causes the thread running in play(boolean, boolean) to sleep.
- Stop button - changes the mode to STOP_MODE and causes play(boolean, boolean) to return.
List buttons:
- Add current - brings up a dialog asking the user for a name for the view, then adds it to the list and the vector.
- Go - goes to the view associated with the name selected in the list.
- Remove - removes the view associated with the name selected in the list. Disables playback if there are no views left in the list.
Menu events:
- Load mouse file - loads in an object file previously saved with the "Save mouse file" command. Displays the views in the list.
- Save mouse file - uses the serialized writeObject method to save the vector of views/mouse events to a file.
- Exit - disposes of this dialog.
- Specified by:
actionPerformedin interfaceActionListener- Specified by:
actionPerformedin classJPanelRendererBase- Parameters:
event- Event that triggered this method.
-
dispose
public void dispose()Dispose memory. -
getMainPanel
Get the main control panel interface.- Specified by:
getMainPanelin classJPanelRendererBase- Returns:
- mainPanel the main control panel.
-
init
public void init()Initializes GUI components. -
isPaused
public boolean isPaused()Returns whether the mouse recorder is paused.- Returns:
- whether the mouse recorder is paused
-
isPlaying
public boolean isPlaying()Returns whether the mouse recorder is playing saved events.- Returns:
- whether the panel is playing a set of saved events
-
isRecording
public boolean isRecording()Returns whether the mouse recorder is recording.- Returns:
- whether the panel is recording
-
isStopped
public boolean isStopped()Returns whether the mouse recorder is stopped.- Returns:
- whether the mouse recorder is stopped
-
mouseClicked
Unchanged.- Specified by:
mouseClickedin interfaceMouseListener- Parameters:
event- Original mouse event.
-
mouseDragged
If recording, adds this mouse event to the mouseEvents vector found at locationcurrent.- Specified by:
mouseDraggedin interfaceMouseMotionListener- Parameters:
event- Original mouse event.
-
mouseEntered
Unchanged.- Specified by:
mouseEnteredin interfaceMouseListener- Parameters:
event- Original mouse event.
-
mouseExited
Unchanged.- Specified by:
mouseExitedin interfaceMouseListener- Parameters:
event- Original mouse event.
-
mouseMoved
Unchanged.- Specified by:
mouseMovedin interfaceMouseMotionListener- Parameters:
event- Original mouse event.
-
mousePressed
If mode is RECORD_MODE, saves the current view and creates a new MouseEventVector. That object holds the name, the view, and a vector with the subsequent mouse events. This is so the size of the list that the user sees stays small. If all mouse events were displayed in the list, the list would soon reach into the thousands. This way, the user sees only the "beginning" of the mouse event. When playback happens, all the mouse events stored in the vector within MouseEventVector are played. For more information, see MouseEventVector.- Specified by:
mousePressedin interfaceMouseListener- Parameters:
event- Original mouse event.
-
mouseReleased
If recording, adds this mouse event to the mouseEvents vector found at locationcurrent.- Specified by:
mouseReleasedin interfaceMouseListener- Parameters:
event- Original mouse event.
-
removeAllItems
public void removeAllItems()Removes all the items on the recording list. -
resizePanel
public void resizePanel(int panelWidth, int frameHeight) Resizig the control panel with ViewJFrameVolumeView's frame width and height.- Overrides:
resizePanelin classJPanelRendererBase- Parameters:
panelWidth- int widthframeHeight- int height
-
setup
public void setup()Sets up variables for recorder. -
setVisible
public void setVisible(boolean status) Makes the dialog visible next to the parent frame. If this makes it go off the screen, puts the dialog in the center of the screen.- Overrides:
setVisiblein classJPanelRendererBase- Parameters:
status- Flag indicating if the dialog should be visible.
-
stateChanged
Sets how the image plane should be displayed depending on value of slider.- Specified by:
stateChangedin interfaceChangeListener- Parameters:
e- Event that triggered this function.
-
transformChanged
public void transformChanged(int type, javax.media.j3d.Transform3D transform) Accessor that lets the dialog know that the canvas transform has changed.- Specified by:
transformChangedin interfacecom.sun.j3d.utils.behaviors.mouse.MouseBehaviorCallback- Parameters:
type- mouse behavior call back typetransform- transformation matrix
-
buildToolBar
Builds the toolbar for the mouse recorder.- Returns:
- DOCUMENT ME!
-
load
Loads the mouse actions as an object file. Clears out the old list and vector, brings up a dialog for the user to choose a file name and directory, then reads in each MouseEventVector and puts it in the events vector (and puts the name in the list).**************************** Not used, might be needed for future use ********************* ******- Throws:
IOException- DOCUMENT ME!
-
play
private void play(boolean selectedToEnd, boolean forever) If there is no other thread running, starts a new thread to play the mouse events.- Parameters:
selectedToEnd- Iftrue, the mouse events are played from the selected one to the end of the list. Iffalseonly the selected one is played.forever- Iftrue, the mouse events list is played until the stop button or pause button is pressed.
-
save
Saves the mouse actions as an object file. Brings up a dialog for the user to choose a file name and directory, then writes out the events vector using an ObjectOutputStream.*********************** Not used, might be needed for future use ******************************- Throws:
IOException- DOCUMENT ME!
-
saveAVI
Saves the mouse actions as an AVI file. Brings up a dialog for the user to choose a file name and directory, then writes out the AVI file.The AVI file will be large, so it is opened and sent the data in pieces. In order to mimic the time delay that can occur between mouse events, blank frames are sent. To make this precise, and also to save space, frames are only written once every 143 milliseconds. This translates into a frame rate of approximately 7 frames per second.
Here is how it works:
- As in play(), we cycle through each mouse event by going through each MouseEventVector and looking at each mouse event stored in the hidden vector within each MouseEventVector.
- There is also a counter that keeps track of how many milliseconds have elapsed by looking at the event.getWhen() variable in a MouseEvent.
- Once every 143 milliseconds, a frame is recorded. If the image that is currently on the canvas has not been recorded, it is captured and processed, and a data frame is sent to FileAvi. If it has already been recorded, a blank frame is sent to FileAvi. So for example, if the user paused for 500 milliseconds between mouse events, one data frame would be sent, followed by two blank frames. Then when someone played back the AVI file, it would look like the user paused for that amount of time.
- The AVI file knows how many frames should be sent and once they've all been sent, it writes out the end signature and closes the file.
User may control size of AVI by changing the frame rate in the dialog or the size of the image stored. The frame rate is defined as something like 7 frames per second, which for our purposes means 7 frames per 1000 milliseconds. Therefore the interval at which frames are saved would be the inverse of the frame rate - in this example, once every (1000/7) milliseconds ~ 143 milliseconds.
- Throws:
IOException- DOCUMENT ME!
-