public class FittsTask
extends javax.swing.JFrame
implements java.awt.event.MouseMotionListener, java.awt.event.MouseListener, java.awt.event.ActionListener, java.awt.event.KeyListener
FittsTask |
The default parameter settings are read from FittsTask.cfg but may be changed through the setup dialog for the current invocation. Changes may be saved by clicking the "Save" button (see above).
The setup parameters are as follows:
The user begins a sequence of trials by clicking on the highlighted target. For the 1D task, the highlight moves back and forth between targets until the specified number of trials are completed. For the 2D task, the highlight moves to a target on the opposite side of the layout circle. Clicking continues in an opposing pattern rotating around the layout circle until all targets are selected. A sequence is finished when the first target is again highlighted and selected.
Timing begins on button-up of the first click and continues to button-up on the last click.
Errors are permitted. The only exception is that the initial click to start a sequence of trials must be inside the first highlighted target.
At the end of a sequence of trials, a popup window appears showing results for the sequence ("Sequence Summary"):
After the last sequence of trials in a block, a popup window appears showing the overall results for the block ( "Block Summary"):
"FittsTask" - application identifier Participant code - from setup dialog Condition code - from setup dialog Session code - from setup dialog Group code - from setup dialog Task type - 1D or 2D Selection method - MB, DTn, KB (Note: "n" is the dwell time) Block code - generated automatically Trial - trial number A - amplitude (distance to target in pixels) W - width (diameter of target in pixels) Ae - effective amplitude (pixels; see below) dx - delta x (pixels; see below) PT - pointing time (ms) ST - selection time (ms) - the time the button is down MT - movement time (ms) - Note: MT = PT + ST Error - 0 = hit, 1 = miss TRE - target re-entries TAC - task axis crossings MDC - movement direction changes ODC - orthogonal direction changes MV - movement variability ME - movement error MO - movement offsetThe first seven entries are settings from the Setup dialog. The next entry,
Block code
, is generated
automatically as the next available block code in the filenames. The next three entries (Trial
,
A
, W
) are the task conditions. The next six ( Ae
, dx
,
PT
, ST
, MT
, Error
) are measures of the participant's performance
for each trial.
Ae
is the effective amplitude – the actual cursor distance projected on the task axis.
Ae
< A
for undershoots and Ae
> A
for overshoots.
dx
is the delta x of the selection coordinates. It is normalized relative to the center of the
target and to the task axis. For example, dx
= 1 is the equivalent of a one-pixel overshoot while
dx
= −1 is the equivalent of a one-pixel undershoot. Note that dx
= 0 does not mean
selection was precisely at the centre of the target. It means selection was on the line orthogonal to the task axis
going through the centre of the target. This is consistent with the inherently one-dimensional nature of Fitts' law.
The last seven measures (TRE
, TAC
, MDC
, ODC
, MV
,
ME
, MO
) capture accuracy characteristics of the cursor path during a trial. These measures
are fully described in Accuracy Measures for Evaluating Computer
Pointing Devices by MacKenzie, Kauppinen, and Silfverberg (2001). See as well the
API for the AccuracyMeasures
class.
"FittsTask" - application identifier Participant code - from setup dialog Condition code - from setup dialog Session code - from setup dialog Group code - from setup dialog Task type - 1D or 2D Selection method - MB, DTn, KB (Note: "n" is the dwell time) Block code - from setup dialog SRC - sequence repeat count Trials - number of trials in this sequence A - target amplitude (pixels) W - target width (diameter) (pixels) ID - index of difficulty (bits) Ae - effective target amplitude (pixels) We - effective target width (pixels) IDe - effective index of difficulty (bits) PT - pointing time (ms) ST - selection time (ms) MT - movement time (ms) ER - error rate (%) TP - throughput (bits/s) TRE - target re-entries TAC - task axis crossings MDC - movement direction changes ODC - orthogonal direction changes MV - movement variability ME - movement error MO - movement offsetThe first seven entries are settings from the Setup dialog. The next entry,
Block code
, is generate
automatically as the next available block code in the filenames. The next entry is SRC
(sequence repeat
count), which is the number of times the sequence was repeated due the error threshold being exceeded. The next four
entries ( Trials
, A
, W
, ID
) are the task conditions.
The remaining entries are measures of participant behaviour, computed over a sequence of trials for the specified A-W condition. All the values, except TP, are means, computed over the trials in the sequence.
TP is the Fitts' law throughput, in bits/s, computed over the sequence of trials. The calculation of TP uses the dx values in the sd1 file (see above). The standard deviation in the dx values for all trials in a sequence is SD x . This is used in the calculation of throughput as follows:
We = 4.133 × SDxThe actual calculation is performed using theIDe = log2(Ae / W e + 1)
TP = IDe / MT
Throughput
class. Consult the
API for complete details.
The following are examples of "sd" (summary data) files:
Actual output files use "FittsTask" as the base filename. This is followed by the participant code, the condition
code, the sequence code, the group code, the task type, the selection method, and the block code, for example,
FittsTask-P15-C01-S01-G01-2D-MB-B01.sd1
.
In most cases, the sd2 data files are the primary files for analyses in an experimental evaluation. The data in the sd2 files are full-precision, comma-delimited, to facilitate importing into a spreadsheet or statistics application. Below is an example for the sd2 file above, after importing into Microsoft Excel: (click to enlarge)
Modifier and Type | Class and Description |
---|---|
class |
FittsTask.TraceSample |
CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
Modifier and Type | Method and Description |
---|---|
void |
actionPerformed(java.awt.event.ActionEvent e) |
javax.sound.sampled.Clip |
initSound(java.lang.String soundFile) |
void |
keyPressed(java.awt.event.KeyEvent ke) |
void |
keyReleased(java.awt.event.KeyEvent ke) |
void |
keyTyped(java.awt.event.KeyEvent ke) |
void |
mouseClicked(java.awt.event.MouseEvent me) |
void |
mouseDragged(java.awt.event.MouseEvent me) |
void |
mouseEntered(java.awt.event.MouseEvent me) |
void |
mouseExited(java.awt.event.MouseEvent me) |
void |
mouseMoved(java.awt.event.MouseEvent me) |
void |
mousePressed(java.awt.event.MouseEvent me) |
void |
mouseReleased(java.awt.event.MouseEvent me) |
void |
playSound(javax.sound.sampled.Clip c) |
getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setIconImage, setJMenuBar, setLayeredPane, setLayout, setTransferHandler, update
addNotify, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setBackground, setCursor, setExtendedState, setMaximizedBounds, setMenuBar, setOpacity, setResizable, setShape, setState, setTitle, setUndecorated
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBackground, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOpacity, getOwnedWindows, getOwner, getOwnerlessWindows, getShape, getToolkit, getType, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isAutoRequestFocus, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isOpaque, isShowing, isValidateRoot, pack, paint, postEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setAutoRequestFocus, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocation, setLocation, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setType, setVisible, show, toBack, toFront
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusDownCycle, validate
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, dispatchEvent, enable, enable, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocusInWindow, resize, resize, revalidate, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
public void keyPressed(java.awt.event.KeyEvent ke)
keyPressed
in interface java.awt.event.KeyListener
public void keyReleased(java.awt.event.KeyEvent ke)
keyReleased
in interface java.awt.event.KeyListener
public void keyTyped(java.awt.event.KeyEvent ke)
keyTyped
in interface java.awt.event.KeyListener
public void actionPerformed(java.awt.event.ActionEvent e)
actionPerformed
in interface java.awt.event.ActionListener
public void mouseDragged(java.awt.event.MouseEvent me)
mouseDragged
in interface java.awt.event.MouseMotionListener
public void mouseMoved(java.awt.event.MouseEvent me)
mouseMoved
in interface java.awt.event.MouseMotionListener
public void mouseClicked(java.awt.event.MouseEvent me)
mouseClicked
in interface java.awt.event.MouseListener
public void mouseEntered(java.awt.event.MouseEvent me)
mouseEntered
in interface java.awt.event.MouseListener
public void mouseExited(java.awt.event.MouseEvent me)
mouseExited
in interface java.awt.event.MouseListener
public void mousePressed(java.awt.event.MouseEvent me)
mousePressed
in interface java.awt.event.MouseListener
public void mouseReleased(java.awt.event.MouseEvent me)
mouseReleased
in interface java.awt.event.MouseListener
public javax.sound.sampled.Clip initSound(java.lang.String soundFile)
public void playSound(javax.sound.sampled.Clip c)