nu.dll.fia
Class FiaPanel

java.lang.Object
  |
  +--java.awt.Component
        |
        +--java.awt.Container
              |
              +--javax.swing.JComponent
                    |
                    +--nu.dll.fia.FiaPanel
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable

public class FiaPanel
extends javax.swing.JComponent
implements java.awt.image.ImageObserver

This is the game GUI and also holds the game state. The GameEngine classes handles the actual playing of the game, these two classes are thus in close cooperation.

See Also:
Serialized Form

Inner classes inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
Inner classes inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Inner classes inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent
 
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 java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
FiaPanel(boolean framedSetupPanel)
          Constructor: sets up mouse listeners, a GameEngine and three maintenance threads (animation, repaint and garbage collection).
 
Method Summary
 java.lang.String getDefaultServer()
           
 boolean imageUpdate(java.awt.Image img, int infoflags, int x, int y, int width, int height)
          Called by the image loader during the progress of loading an image.
 void paint(java.awt.Graphics g)
          Paint the entire component.
 void setDefaultServer(java.lang.String s)
           
 void setHoveredPiece(nu.dll.fia.Piece p)
          Highlights the supplied piece object, and un-hightlight any piece previously highlighted.
 void setupInitialGameState()
          Set up all player and table data for a new game.
 void update(java.awt.Graphics g)
           
 nu.dll.fia.Move waitForMove(int diceRoll)
          Blocks the calling thread until a move has been performed by the user, then returns the move set by the thread performing the move.
 boolean waitForUserConfirm()
          Blocks the calling thread until a user click, and returns true if the user clicked button 1, false otherwise.
 boolean validMove(nu.dll.fia.Piece piece, int index)
          Ask the GameEngine if the suggested move is valid.
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addPropertyChangeListener, addPropertyChangeListener, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getAccessibleContext, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAutoscrolls, getBorder, getBounds, getClientProperty, getComponentGraphics, getConditionForKeyStroke, getDebugGraphicsOptions, getGraphics, getHeight, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getUIClassID, getVerifyInputWhenFocusTarget, getWidth, getVisibleRect, getX, getY, grabFocus, hasFocus, hide, isDoubleBuffered, isFocusCycleRoot, isFocusTraversable, isLightweightComponent, isManagingFocus, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isOptimizedDrawingEnabled, isPaintingTile, isPreferredSizeSet, isRequestFocusEnabled, isValidateRoot, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, paramString, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processFocusEvent, processKeyBinding, processKeyEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removePropertyChangeListener, removePropertyChangeListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setDebugGraphicsOptions, setDoubleBuffered, setEnabled, setFont, setForeground, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, updateUI
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getLayout, insets, invalidate, isAncestorOf, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setLayout, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, getBackground, getBounds, getColorModel, getComponentOrientation, getCursor, getDropTarget, getFont, getFontMetrics, getForeground, getGraphicsConfiguration, getInputContext, getInputMethodRequests, getLocale, getLocation, getLocationOnScreen, getName, getParent, getPeer, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, inside, isDisplayable, isEnabled, isLightweight, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

FiaPanel

public FiaPanel(boolean framedSetupPanel)
Constructor: sets up mouse listeners, a GameEngine and three maintenance threads (animation, repaint and garbage collection). The GameEngine will further start a thread on its own, and set-up a JPanel for user settings. If 'framedSetupPanel' is true, the GameEngine will create a new frame and place the user settings panel there. Otherwise the settings panel will be available from the engine by the method call GameEngine.getSetupPanel().
Method Detail

setupInitialGameState

public void setupInitialGameState()
Set up all player and table data for a new game. Also notifies all threads blocking on moveLock or inputLock, to prevent a thread to continue waiting for user input although the game state has been reset.

getDefaultServer

public java.lang.String getDefaultServer()

setDefaultServer

public void setDefaultServer(java.lang.String s)

validMove

public boolean validMove(nu.dll.fia.Piece piece,
                         int index)
Ask the GameEngine if the suggested move is valid.

waitForUserConfirm

public boolean waitForUserConfirm()
Blocks the calling thread until a user click, and returns true if the user clicked button 1, false otherwise.

waitForMove

public nu.dll.fia.Move waitForMove(int diceRoll)
Blocks the calling thread until a move has been performed by the user, then returns the move set by the thread performing the move.

setHoveredPiece

public void setHoveredPiece(nu.dll.fia.Piece p)
Highlights the supplied piece object, and un-hightlight any piece previously highlighted. The actual rendering of the highlight is done my the paintPiece() method which checks the piece's highlighted flag and renders it accordingly.

update

public void update(java.awt.Graphics g)
Overrides:
update in class javax.swing.JComponent

paint

public void paint(java.awt.Graphics g)
Paint the entire component. The base table is only rendered on first call or when the component size has change, and is then saved to an off-screen image which is copied to screen on the following calls. On top of the table, the pieces are drawn by paintPieces(), and after that the status rectangle at the bottom is drawn by paintStatus(). All drawing is done to an off-screen image until the component is fully rendered.

Q: is it really necessary to synchronize this method, or can Swing guarantee that it's only called from the AWT-EventQueue thread?

Overrides:
paint in class javax.swing.JComponent

imageUpdate

public boolean imageUpdate(java.awt.Image img,
                           int infoflags,
                           int x,
                           int y,
                           int width,
                           int height)
Called by the image loader during the progress of loading an image. If the refences image is the "prize" image, this method sets a few fields with image data when the loading is finished to let the paintStatus() method draw it property.
Specified by:
imageUpdate in interface java.awt.image.ImageObserver
Overrides:
imageUpdate in class java.awt.Component