au.com.solidsoftware.multimahjong.mmc.usergui
Class MultiGameJoiner

java.lang.Object
  |
  +--java.awt.Component
        |
        +--java.awt.Container
              |
              +--javax.swing.JComponent
                    |
                    +--javax.swing.JInternalFrame
                          |
                          +--au.com.solidsoftware.multimahjong.mmc.usergui.MultiGameJoiner

public class MultiGameJoiner
extends javax.swing.JInternalFrame

An internal frame that forms a connection to the MultiMahjongServer and allows the user to monitor the list of games that are currently on the server. From this list, the user may select a game to join. The multi game joiner will be shown to players who have requested to join an existing multi player game. It will show a list of all games running on the server. The name of the game creator, the limit, and the number of places remaining will be shown for each game.

The "Back <<" button allows the user to return to the previous game type selector screen.

This frame will also provide a "Join Game" button which allows the user to join the currently selected game. The button will be enabled only when the user has selected a game to join from the list.

Once the user clicks on the "Join Game" button, they will be presented with a waiting screen while waiting for the game creator to start the game. This screen features an animated image. The "Back <<" button becomes disabled once the user has joined a game. type selector screen.

Author:
Victor H. Leung
See Also:
Serialized Form

Inner Class Summary
private  class MultiGameJoiner.MyTableModel
          A custom AbstractTableModel to properly format our table for display purposes.
 
Inner classes inherited from class javax.swing.JInternalFrame
javax.swing.JInternalFrame.AccessibleJInternalFrame, javax.swing.JInternalFrame.JDesktopIcon
 
Inner classes inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent, javax.swing.JComponent.IntVector, javax.swing.JComponent.KeyboardBinding, javax.swing.JComponent.KeyboardState
 
Inner classes inherited from class java.awt.Component
java.awt.Component.AWTTreeLock
 
Field Summary
private  javax.swing.JButton exitButton
          A button that allows the user to return to the game type selector.
private  MiniGame[] gamesList
          An array containing information that describes each game.
private  GamesObserver gamesObserver
          This is passed between the MultiGameJoiner and the Registrar and is used to inform the MultiGameJoiner that the list of games on the server has changed.
private  javax.swing.JButton joinButton
          A button that allows the user to join the currently selected game.
private  int playerID
          An unique identifier for the user.
private  RefereeIntf referee
          This is a reference to the remote referee, which initialises the game wall and player seating positions.
private  Registrar registrar
          A reference to the server-side Registrar, which handles the starting, joining and ending of multi player games.
private  int selectedGame
          The array index that refers to the currently selected game in the MiniGame array.
private  MultiGameJoiner.MyTableModel tableModel
          This specifies the methods the JTable will use to interrogate a tabular data model.
 
Fields inherited from class javax.swing.JInternalFrame
closable, CONTENT_PANE_PROPERTY, defaultCloseOperation, desktopIcon, FRAME_ICON_PROPERTY, frameIcon, GLASS_PANE_PROPERTY, iconable, IS_CLOSED_PROPERTY, IS_ICON_PROPERTY, IS_MAXIMUM_PROPERTY, IS_SELECTED_PROPERTY, isClosed, isIcon, isMaximum, isSelected, LAYERED_PANE_PROPERTY, maximizable, MENU_BAR_PROPERTY, opened, resizable, ROOT_PANE_PROPERTY, rootPane, rootPaneCheckingEnabled, title, TITLE_PROPERTY, uiClassID
 
Fields inherited from class javax.swing.JComponent
_bounds, accessibleContext, alignmentX, alignmentY, ANCESTOR_USING_BUFFER, ancestorNotifier, autoscroller, border, changeSupport, clientProperties, flags, HAS_FOCUS, IS_DOUBLE_BUFFERED, IS_OPAQUE, IS_PAINTING_TILE, KEYBOARD_BINDINGS_KEY, listenerList, maximumSize, minimumSize, NEXT_FOCUS, paintImmediatelyClip, preferredSize, readObjectCallbacks, REQUEST_FOCUS_DISABLED, tmpRect, TOOL_TIP_TEXT_KEY, ui, uiClassID, UNDEFINED_CONDITION, vetoableChangeSupport, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Container
component, containerListener, containerSerializedDataVersion, dispatcher, layoutMgr, maxSize, ncomponents, serialVersionUID
 
Fields inherited from class java.awt.Component
actionListenerK, adjustmentListenerK, appContext, assert, background, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, changeSupport, componentListener, componentListenerK, componentOrientation, componentSerializedDataVersion, containerListenerK, cursor, dropTarget, enabled, eventMask, focusListener, focusListenerK, font, foreground, hasFocus, height, incRate, inputMethodListener, inputMethodListenerK, isInc, isPacked, itemListenerK, keyListener, keyListenerK, LEFT_ALIGNMENT, locale, LOCK, minSize, mouseListener, mouseListenerK, mouseMotionListener, mouseMotionListenerK, name, nameExplicitlySet, newEventsOnly, ownedWindowK, parent, peer, peerFont, popups, prefSize, RIGHT_ALIGNMENT, serialVersionUID, textListenerK, TOP_ALIGNMENT, valid, visible, width, windowListenerK, x, y
 
Constructor Summary
MultiGameJoiner(UserGUI userGUI, java.lang.String name, int iconID, Registrar registrar)
          Creates a new instance of MultiGameJoiner and displays the internal frame in the centre of the application window.
 
Method Summary
 void addGame(java.lang.String name, int limit, int gameID)
          Adds a game to the list of available games.
 void removeGame(int gameID)
          Removes a game from the list of available games.
 void updateWaiting(int gameID, int waitingToJoin)
          Updates the number of places remaining in the specified game.
 
Methods inherited from class javax.swing.JInternalFrame
addImpl, addInternalFrameListener, createRootPane, createRootPaneException, dispose, doDefaultCloseAction, fireInternalFrameEvent, getAccessibleContext, getBackground, getContentPane, getDefaultCloseOperation, getDesktopIcon, getDesktopPane, getForeground, getFrameIcon, getGlassPane, getJMenuBar, getLayer, getLayeredPane, getMenuBar, getRootPane, getTitle, getUI, getUIClassID, getWarningString, isClosable, isClosed, isIcon, isIconifiable, isMaximizable, isMaximum, isResizable, isRootPaneCheckingEnabled, isSelected, moveToBack, moveToFront, pack, paramString, removeInternalFrameListener, reshape, setBackground, setClosable, setClosed, setContentPane, setDefaultCloseOperation, setDesktopIcon, setForeground, setFrameIcon, setGlassPane, setIcon, setIconifiable, setJMenuBar, setLayer, setLayeredPane, setLayout, setMaximizable, setMaximum, setMenuBar, setResizable, setRootPane, setRootPaneCheckingEnabled, setSelected, setTitle, setUI, setVisible, show, startModal, stopModal, toBack, toFront, updateUI, updateUIWhenHidden, writeObject
 
Methods inherited from class javax.swing.JComponent
_paintImmediately, , addAncestorListener, addNotify, addPropertyChangeListener, addVetoableChangeListener, adjustPaintFlags, alwaysOnTop, bindingForKeyStroke, computeVisibleRect, computeVisibleRect, contains, createToolTip, enableSerialization, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getAlignmentX, getAlignmentY, getAutoscrolls, getBorder, getBounds, getClientProperties, getClientProperty, getComponentGraphics, getConditionForKeyStroke, getDebugGraphicsOptions, getFlag, getGraphics, getHeight, getInsets, getInsets, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPreferredSize, getRegisteredKeyStrokes, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getVisibleRect, getWidth, getX, getY, grabFocus, hasFocus, isDoubleBuffered, isFocusCycleRoot, isFocusTraversable, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingTile, isRequestFocusEnabled, isValidateRoot, keyboardBindings, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, paintWithBuffer, processComponentKeyEvent, processFocusEvent, processKeyBinding, processKeyBindings, processKeyBindingsForAllComponents, processKeyEvent, processMouseMotionEvent, putClientProperty, readObject, rectangleIsObscured, registerKeyboardAction, registerKeyboardAction, registerWithKeyboardManager, removeAncestorListener, removeNotify, removePropertyChangeListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, resetKeyboardActions, revalidate, scrollRectToVisible, setAlignmentX, setAlignmentY, setAutoscrolls, setBorder, setDebugGraphicsOptions, setDoubleBuffered, setEnabled, setFlag, setFont, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setUI, shouldDebugGraphics, superProcessMouseMotionEvent, unregisterKeyboardAction, unregisterWithKeyboardManager, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, applyOrientation, countComponents, deliverEvent, dispatchEventImpl, dispatchEventToSelf, doLayout, eventEnabled, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents_NoClientCode, getComponents, getLayout, getMouseEventTarget, getWindow, initIDs, insets, invalidate, invalidateTree, isAncestorOf, layout, lightweightPrint, list, list, locate, minimumSize, nextFocus, paintComponents, postProcessKeyEvent, postsOldMouseEvents, preferredSize, preProcessKeyEvent, print, printComponents, printOneComponent, processContainerEvent, processEvent, proxyEnableEvents, proxyRequestFocus, remove, remove, removeAll, removeContainerListener, setFocusOwner, transferFocus, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addPropertyChangeListener, areInputMethodsEnabled, bounds, checkImage, checkImage, coalesceEvents, constructComponentName, contains, createImage, createImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, getBounds, getColorModel, getComponentOrientation, getCursor, getDropTarget, getFont_NoClientCode, getFont, getFontMetrics, getInputContext, getInputMethodRequests, getLocale, getLocation, getLocationOnScreen, getName, getNativeContainer, getParent_NoClientCode, getParent, getPeer, getSize, getToolkit, getToolkitImpl, getTreeLock, getWindowForObject, gotFocus, handleEvent, hide, imageUpdate, inside, isDisplayable, isEnabled, isEnabledImpl, isLightweight, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, printAll, processComponentEvent, processInputMethodEvent, processMouseEvent, remove, removeComponentListener, removeFocusListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setLocale, setLocation, setLocation, setName, setSize, setSize, show, size, toString, transferFocus
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, wait, wait, wait
 

Field Detail

exitButton

private javax.swing.JButton exitButton
A button that allows the user to return to the game type selector. This button will be disabled once the user joins a game.


joinButton

private javax.swing.JButton joinButton
A button that allows the user to join the currently selected game. This button will be disabled when no games are currently selected.


tableModel

private MultiGameJoiner.MyTableModel tableModel
This specifies the methods the JTable will use to interrogate a tabular data model.


gamesList

private MiniGame[] gamesList
An array containing information that describes each game. The information consists of the name of the game creator, the limit, and number of places available.


selectedGame

private int selectedGame
The array index that refers to the currently selected game in the MiniGame array.


playerID

private int playerID
An unique identifier for the user. This is assigned by the Registrar.


gamesObserver

private GamesObserver gamesObserver
This is passed between the MultiGameJoiner and the Registrar and is used to inform the MultiGameJoiner that the list of games on the server has changed.


referee

private RefereeIntf referee
This is a reference to the remote referee, which initialises the game wall and player seating positions. The Referee is also responsible for coordinating the running of the entire game.


registrar

private Registrar registrar
A reference to the server-side Registrar, which handles the starting, joining and ending of multi player games.
Constructor Detail

MultiGameJoiner

public MultiGameJoiner(UserGUI userGUI,
                       java.lang.String name,
                       int iconID,
                       Registrar registrar)
Creates a new instance of MultiGameJoiner and displays the internal frame in the centre of the application window. This method will create and pass a GamesObserver object to the registrar, which will contain a reference to this object. The server-side Registrar object will then use this reference to update the list of games residing on the server.

Parameters:
userGUI - a reference to the parent UserGUI object
name - the name of the user
iconID - the iconID of the user
registrar - the server-side Registrar object
Method Detail

addGame

public void addGame(java.lang.String name,
                    int limit,
                    int gameID)
Adds a game to the list of available games. This method is called by the GamesObserver which is in turn called by the MMS.

Parameters:
name - the name of the game creator
limit - the score limit
gameID - a unique identifier for the game

updateWaiting

public void updateWaiting(int gameID,
                          int waitingToJoin)
Updates the number of places remaining in the specified game. This method is called by the GamesObserver which is in turn called by the MMS.

Parameters:
gameID - a unique identifier for the game
waitingToJoin - the number of places remaining

removeGame

public void removeGame(int gameID)
Removes a game from the list of available games. This method is called by the GamesObserver which is in turn called by the MMS.

Parameters:
gameID - a unique identifier for the game