org.jhotdraw.app
Class AbstractView

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.JPanel
                  extended by org.jhotdraw.app.AbstractView
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, View
Direct Known Subclasses:
DrawView, NetView, ODGView, PertView, SVGView, TeddyView

public abstract class AbstractView
extends javax.swing.JPanel
implements View

AbstractView.

Version:
1.3 2009-02-08 Made preferences variable protected instead of private.
1.2.1 2008-09-09 Explicitly dispose of the executor service.
1.2 2007-12-25 Updated to changes in View interface.
1.1.1 2006-04-11 Fixed view file preferences.
1.1 2006-02-16 Support for preferences added.
1.0 January 3, 2006 Created.
Author:
Werner Randelshofer
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JPanel
javax.swing.JPanel.AccessibleJPanel
 
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.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
private  java.util.HashMap<java.lang.String,javax.swing.Action> actions
          Hash map for storing view actions by their ID.
private  Application application
           
protected  java.util.concurrent.ExecutorService executor
          The executor used to perform background tasks for the View in a controlled manner.
protected  java.io.File file
          The view file.
private  boolean hasUnsavedChanges
          This is set to true, if the view has unsaved changes.
private  boolean isShowing
          This is set to true, if the view is showing.
private  int multipleOpenId
          This id is used to make multiple open projects from the same view file identifiable.
protected  javax.swing.JFileChooser openChooser
          The file chooser used for opening the view.
protected  java.util.prefs.Preferences preferences
          The preferences of the view.
protected  javax.swing.JFileChooser saveChooser
          The file chooser used for saving the view.
private  java.lang.String title
          The title of the view.
 
Fields inherited from class javax.swing.JComponent
accessibleContext, 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
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface org.jhotdraw.app.View
APPLICATION_PROPERTY, ENABLED_PROPERTY, FILE_PROPERTY, HAS_UNSAVED_CHANGES_PROPERTY, MULTIPLE_OPEN_ID_PROPERTY, SHOWING_PROPERTY, TITLE_PROPERTY
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
AbstractView()
          Creates a new instance.
 
Method Summary
 void activate()
          Activates the view.
 boolean canSaveTo(java.io.File file)
          Returns true, if this view can be saved to the specified file.
protected  javax.swing.JFileChooser createOpenChooser()
           
protected  javax.swing.JFileChooser createSaveChooser()
           
 void deactivate()
          Deactivates the view.
 void dispose()
          Gets rid of all the resources of the view.
 void execute(java.lang.Runnable worker)
          Executes the specified runnable on the worker thread of the view.
 javax.swing.Action getAction(java.lang.String id)
          Returns the action with the specified id.
 Application getApplication()
          Gets the application to which this view belongs.
 javax.swing.JComponent getComponent()
          Returns the visual component of the view.
 java.io.File getFile()
          Returns the file which holds the document of the view.
 int getMultipleOpenId()
          Returns the multiple open id.
 javax.swing.JFileChooser getOpenChooser()
          Gets the open file chooser for the view.
 javax.swing.JFileChooser getSaveChooser()
          Gets the save file chooser for the view.
 java.lang.String getTitle()
          Gets the title of the view.
 boolean hasUnsavedChanges()
          Returns true, if the view has unsaved changes.
 void init()
          Initializes the view.
private  void initComponents()
          This method is called from within the constructor to initialize the form.
 boolean isShowing()
          This is used by Application to keep track if a view is showing.
 void markChangesAsSaved()
          Marks all changes as saved.
 void putAction(java.lang.String id, javax.swing.Action action)
          Puts an action with the specified id.
 void setApplication(Application newValue)
          Sets the application of the view.
 void setFile(java.io.File newValue)
          Sets the file of the view.
protected  void setHasUnsavedChanges(boolean newValue)
           
 void setMultipleOpenId(int newValue)
          Sets the multiple open id.
 void setShowing(boolean newValue)
          This is used by Application to keep track if a view is showing.
 void setTitle(java.lang.String newValue)
          Sets the title of the view.
 void start()
          Starts the view.
 void stop()
          Stops the view.
 
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, 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, 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, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, 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, 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, transferFocusBackward, 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, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, 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, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.jhotdraw.app.View
addPropertyChangeListener, clear, isEnabled, read, removePropertyChangeListener, setEnabled, write
 

Field Detail

application

private Application application

saveChooser

protected javax.swing.JFileChooser saveChooser
The file chooser used for saving the view. Has a null value, if the file chooser has not been used yet.


openChooser

protected javax.swing.JFileChooser openChooser
The file chooser used for opening the view. Has a null value, if the file chooser has not been used yet.


file

protected java.io.File file
The view file. Has a null value, if the view has not been loaded from a file or has not been saved yet.


executor

protected java.util.concurrent.ExecutorService executor
The executor used to perform background tasks for the View in a controlled manner. This executor ensures that all background tasks are executed sequentually.


actions

private java.util.HashMap<java.lang.String,javax.swing.Action> actions
Hash map for storing view actions by their ID.


hasUnsavedChanges

private boolean hasUnsavedChanges
This is set to true, if the view has unsaved changes.


preferences

protected java.util.prefs.Preferences preferences
The preferences of the view.


multipleOpenId

private int multipleOpenId
This id is used to make multiple open projects from the same view file identifiable.


isShowing

private boolean isShowing
This is set to true, if the view is showing.


title

private java.lang.String title
The title of the view.

Constructor Detail

AbstractView

public AbstractView()
Creates a new instance.

Method Detail

init

public void init()
Initializes the view. This method does nothing, subclasses don't neet to call super.

Specified by:
init in interface View

start

public void start()
Starts the view. This method does nothing, subclasses don't neet to call super.

Specified by:
start in interface View

activate

public void activate()
Activates the view. This method does nothing, subclasses don't neet to call super.

Specified by:
activate in interface View

deactivate

public void deactivate()
Deactivates the view. This method does nothing, subclasses don't neet to call super.

Specified by:
deactivate in interface View

stop

public void stop()
Stops the view. This method does nothing, subclasses don't neet to call super.

Specified by:
stop in interface View

dispose

public void dispose()
Gets rid of all the resources of the view. No other methods should be invoked on the view afterwards.

Specified by:
dispose in interface View

initComponents

private void initComponents()
This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor.


setApplication

public void setApplication(Application newValue)
Description copied from interface: View
Sets the application of the view. By convention, this is only invoked by Application.add() and Application.remove(). This is a bound property.

Specified by:
setApplication in interface View

getApplication

public Application getApplication()
Description copied from interface: View
Gets the application to which this view belongs.

Specified by:
getApplication in interface View

getComponent

public javax.swing.JComponent getComponent()
Description copied from interface: View
Returns the visual component of the view.

Specified by:
getComponent in interface View

getFile

public java.io.File getFile()
Description copied from interface: View
Returns the file which holds the document of the view.

Specified by:
getFile in interface View

setFile

public void setFile(java.io.File newValue)
Description copied from interface: View
Sets the file of the view. This is a bound property.

Specified by:
setFile in interface View

getOpenChooser

public javax.swing.JFileChooser getOpenChooser()
Gets the open file chooser for the view.

Specified by:
getOpenChooser in interface View

createOpenChooser

protected javax.swing.JFileChooser createOpenChooser()

getSaveChooser

public javax.swing.JFileChooser getSaveChooser()
Gets the save file chooser for the view.

Specified by:
getSaveChooser in interface View

canSaveTo

public boolean canSaveTo(java.io.File file)
Description copied from interface: View
Returns true, if this view can be saved to the specified file. A reason why the view can't be saved to a file, is that the view is unable to write to a file with the given filename extension without losing data.

The SaveAction uses this method to decide, whether to display a file dialog before saving the file.

Specified by:
canSaveTo in interface View
Parameters:
file - A file. If this parameter is null, a NullPointerException is thrown.

createSaveChooser

protected javax.swing.JFileChooser createSaveChooser()

hasUnsavedChanges

public boolean hasUnsavedChanges()
Returns true, if the view has unsaved changes. This is a bound property.

Specified by:
hasUnsavedChanges in interface View

setHasUnsavedChanges

protected void setHasUnsavedChanges(boolean newValue)

getAction

public javax.swing.Action getAction(java.lang.String id)
Returns the action with the specified id.

Specified by:
getAction in interface View

putAction

public void putAction(java.lang.String id,
                      javax.swing.Action action)
Puts an action with the specified id.

Specified by:
putAction in interface View

execute

public void execute(java.lang.Runnable worker)
Executes the specified runnable on the worker thread of the view. Execution is perfomred sequentially in the same sequence as the runnables have been passed to this method.

Specified by:
execute in interface View

setMultipleOpenId

public void setMultipleOpenId(int newValue)
Description copied from interface: View
Sets the multiple open id. The id is used to help distinguish multiply opened views. The id should be displayed in the title of the view.

Specified by:
setMultipleOpenId in interface View

getMultipleOpenId

public int getMultipleOpenId()
Description copied from interface: View
Returns the multiple open id. If a view is open only once this should be 1.

Specified by:
getMultipleOpenId in interface View

setShowing

public void setShowing(boolean newValue)
Description copied from interface: View
This is used by Application to keep track if a view is showing.

Specified by:
setShowing in interface View

isShowing

public boolean isShowing()
Description copied from interface: View
This is used by Application to keep track if a view is showing.

Specified by:
isShowing in interface View
Overrides:
isShowing in class java.awt.Component

markChangesAsSaved

public void markChangesAsSaved()
Description copied from interface: View
Marks all changes as saved. This changes the state of hasUnsavedChanges to false.

Specified by:
markChangesAsSaved in interface View

setTitle

public void setTitle(java.lang.String newValue)
Description copied from interface: View
Sets the title of the view.

The title is generated by the application, based on the current file of the view. The application ensures that the title uniquely identifies each open view.

The application displays the title in the title bar of the view window and in all windows which are associated to the view.

This is a bound property.

Specified by:
setTitle in interface View

getTitle

public java.lang.String getTitle()
Description copied from interface: View
Gets the title of the view.

Specified by:
getTitle in interface View