public class GBoard
extends javax.swing.JComponent
Gelem
objects to be drawed. All drawings
are persistent within the board, so once a Gelem
is
drawed the GBoard
object will take care of its correct
drawing (for example when the dimensions of the board change).
Normally a Gelem
uses only one cell (1x1
),
but it may occupy a rectangle of cells (NxM
), as
long as it fits inside the board.
Top-left coordinate is (0,0)
.
Multiple independent GBoard
can be created, used, and
destroyed (terminate). The last closing board will also terminate
the application.
To use GBoard the normal procedure is:
1. create a new GBoard
object;
2. draw/erase/move gelems in any position;
3. terminate.
invariant: numberOfLines() > 0 && numberOfColumns() > 0
invariant: numberOfLayers() > 0
This class follows DbC(tm) methodology
(@see Wikipedia).
Where possible, contracts are implement with JML
(@see Wikipedia)
and native's Java
assert.
TOOL_TIP_TEXT_KEY, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
Constructor and Description |
---|
GBoard(java.lang.String name,
int numberOfLines,
int numberOfColumns,
int numberOfLayers)
Constructs a new GBoard with (
numberOfLines x numberOfColumns ) cells and numberOfLayers layers. |
GBoard(java.lang.String name,
int numberOfLines,
int numberOfColumns,
int defaultCellWidth,
int defaultCellHeight,
int numberOfLayers)
Constructs a new GBoard with (numberOfLines x numberOfColumns) cells and numberOfLayers layers.
|
Modifier and Type | Method and Description |
---|---|
boolean |
active()
Is object GBoard still active?
|
int |
cellHeight()
Returns the current height of each cell (in pixels).
|
int |
cellWidth()
Returns the current width of each cell (in pixels).
|
java.awt.Container |
contentPane() |
void |
draw(Gelem gelem,
int line,
int column,
int layer)
Add and draw a gelem.
|
void |
erase(Gelem gelem,
int line,
int column)
Erase a gelem from position (in any layer where it exists).
|
void |
erase(Gelem gelem,
int line,
int column,
int layer)
Erase a gelem.
|
void |
erase(int line,
int column)
Erase all gelems from a position (in all layers).
|
void |
erase(int line,
int column,
int minLayer,
int maxLayer)
Erases all gelems from a position in layers belonging to interval
[minLayer, maxLayer] . |
void |
eraseAll()
Erases all drawed gelems.
|
void |
eraseAll(int minLayer,
int maxLayer)
Erases all drawed gelems in layers belonging to interval
[minLayer, maxLayer] . |
boolean |
exists(Gelem gelem,
int line,
int column)
Checks if a gelem exists in a position in any layer.
|
boolean |
exists(Gelem gelem,
int line,
int column,
int layer)
Checks if a gelem exists in a position at a layer.
|
boolean |
exists(Gelem gelem,
int line,
int column,
int minLayer,
int maxLayer)
Checks if a gelem exists in a position in the layer interval
[minLayer, maxLayer] . |
boolean |
exists(int line,
int column)
Checks if any gelem exists in a position at any layer.
|
boolean |
exists(int line,
int column,
int layer)
Checks if any gelem exists in a position at a layer.
|
boolean |
exists(int line,
int column,
int minLayer,
int maxLayer)
Checks if any gelem exists in a position in the layer interval
[minLayer, maxLayer] . |
javax.swing.JFrame |
frame() |
boolean |
gelemFitsInside(Gelem gelem,
int line,
int column)
Checks if a gelem fits inside current GBoard
|
int |
gelemLayer(Gelem gelem,
int line,
int column)
Returns the topmost layer containing gelem in that position.
|
java.awt.Dimension |
getPreferredSize() |
boolean |
inputListenerExists()
Checks if exists an input handler.
|
void |
move(Gelem gelem,
int fromLine,
int fromColumn,
int toLine,
int toColumn)
Move gelems within the same layer.
|
void |
move(Gelem gelem,
int fromLine,
int fromColumn,
int fromLayer,
int toLine,
int toColumn,
int toLayer)
Move a gelem.
|
void |
mutableDraw(Gelem gelem,
int line,
int column,
int layer)
Draw the mutable part of a gelem.
|
void |
mutableErase(Gelem gelem,
int line,
int column,
int layer)
Erase the mutable part of a gelem.
|
int |
numberOfColumns()
Board's number of columns.
|
int |
numberOfLayers()
Board's number of layers.
|
int |
numberOfLines()
Board's number of lines.
|
void |
popInputHandler()
Pops the board's top input handler.
|
void |
pushInputHandler(GBoardInputHandler handler)
Pushes a new board input handler.
|
static void |
sleep(int msec)
Stops thread execution for
msec milliseconds. |
void |
terminate()
Terminates the GBoard (closing also the attached window).
|
Gelem |
topGelem(int line,
int column)
Returns the topest gelem at position
(line,column) , or null if none exists. |
Gelem |
topGelem(int line,
int column,
int minLayer,
int maxLayer)
Returns the topest gelem at position
(line,column) in layers
belonging to interval [minLayer, maxLayer] , or null if none exists. |
boolean |
validColumn(int column)
Checks if column is valid.
|
boolean |
validLayer(int layer)
Checks if layer is valid.
|
boolean |
validLine(int line)
Checks if line is valid.
|
boolean |
validPosition(int line,
int column)
Checks if position is valid.
|
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintImmediately, paintImmediately, print, printAll, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, 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, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update, updateUI
add, add, add, add, add, addContainerListener, 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, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, contains, createImage, createImage, createVolatileImage, createVolatileImage, dispatchEvent, enable, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getAccessibleContext, 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, 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, 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, transferFocusBackward, transferFocusUpCycle
public GBoard(java.lang.String name, int numberOfLines, int numberOfColumns, int numberOfLayers)
numberOfLines x numberOfColumns
) cells and numberOfLayers
layers. The initial dimensions of cells will be: 60x60
.
requires: name != null
requires: numberOfLines >= 1 && numberOfColumns >= 1
requires: numberOfLayers >= 1
name
- board namenumberOfLines
- number of linesnumberOfColumns
- number of columnsnumberOfLayers
- number of layerspublic GBoard(java.lang.String name, int numberOfLines, int numberOfColumns, int defaultCellWidth, int defaultCellHeight, int numberOfLayers)
requires: name != null
requires: numberOfLines >= 1 && numberOfColumns >= 1
requires: defaultCellWidth >= 1 && defaultCellHeight >= 1
requires: numberOfLayers >= 1
name
- board namenumberOfLines
- number of linesnumberOfColumns
- number of columnsdefaultCellWidth
- width in pixels of each celldefaultCellHeight
- height in pixels of each cellnumberOfLayers
- number of layerspublic void terminate()
requires: active()
ensures: !active()
public boolean active()
boolean
true if active, otherwise it returns falsepublic int numberOfLines()
int
number of linespublic int numberOfColumns()
int
number of columnpublic int numberOfLayers()
int
number of layerspublic boolean validLine(int line)
line
- the line numberboolean
true if line is valid, otherwise it returns falsepublic boolean validColumn(int column)
column
- the column numberboolean
true if column is valid, otherwise it returns falsepublic boolean validPosition(int line, int column)
line
- the line numbercolumn
- the column numberboolean
true if position is valid, otherwise it returns falsepublic boolean validLayer(int layer)
layer
- the layer numberboolean
true if layer is valid, otherwise it returns falsepublic boolean gelemFitsInside(Gelem gelem, int line, int column)
requires: gelem != null
requires: validPosition(line, column)
gelem
- objectline
- the line numbercolumn
- the column numberboolean
true if fits insidepublic boolean exists(Gelem gelem, int line, int column, int layer)
requires: gelem != null
requires: validPosition(line, column)
requires: validLayer(layer)
gelem
- objectline
- the line numbercolumn
- the column numberlayer
- the layer numberboolean
true if existspublic boolean exists(Gelem gelem, int line, int column, int minLayer, int maxLayer)
[minLayer, maxLayer]
.
requires: gelem != null
requires: validPosition(line, column)
requires: validLayer(minLayer)
requires: validLayer(maxLayer)
requires: maxLayer >= minLayer;
gelem
- objectline
- the line numbercolumn
- the column numberminLayer
- the lower layer numbermaxLayer
- the higher (topest) layer numberboolean
true if existspublic boolean exists(Gelem gelem, int line, int column)
requires: gelem != null
requires: validPosition(line, column)
gelem
- objectline
- the line numbercolumn
- the column numberboolean
true if existspublic boolean exists(int line, int column, int layer)
requires: validPosition(line, column)
requires: validLayer(layer)
line
- the line numbercolumn
- the column numberlayer
- the layer numberboolean
true if existspublic boolean exists(int line, int column, int minLayer, int maxLayer)
[minLayer, maxLayer]
.
requires: validPosition(line, column)
requires: validLayer(minLayer)
requires: validLayer(maxLayer)
requires: maxLayer >= minLayer;
line
- the line numbercolumn
- the column numberminLayer
- the lower layer numbermaxLayer
- the higher (topest) layer numberboolean
true if existspublic boolean exists(int line, int column)
requires: validPosition(line, column)
line
- the line numbercolumn
- the column numberboolean
true if existspublic int gelemLayer(Gelem gelem, int line, int column)
requires: exists(gelem, line, column)
ensures: validLayer(\result)
gelem
- objectline
- the line numbercolumn
- the column numberboolean
true if existspublic Gelem topGelem(int line, int column)
(line,column)
, or null
if none exists.
requires: validPosition(line, column)
line
- the line numbercolumn
- the column numberGelem
the gelem's reference, or nullpublic Gelem topGelem(int line, int column, int minLayer, int maxLayer)
(line,column)
in layers
belonging to interval [minLayer, maxLayer]
, or null
if none exists.
requires: validPosition(line, column)
requires: validLayer(minLayer)
requires: validLayer(maxLayer)
requires: maxLayer >= minLayer;
line
- the line numbercolumn
- the column numberminLayer
- the lower layer numbermaxLayer
- the higher (topest) layer numberGelem
the gelem's reference, or nullpublic void move(Gelem gelem, int fromLine, int fromColumn, int fromLayer, int toLine, int toColumn, int toLayer)
requires: active()
requires: gelem != null
requires: validPosition(fromLine, fromColumn)
requires: validLayer(fromLayer)
requires: validPosition(toLine, toColumn)
requires: validLayer(toLayer)
requires: exists(gelem, fromLine, fromColumn, fromLayer)
requires: (fromLine == toLine && fromColumn == toColumn && fromLayer == toLayer) || !exists(gelem, toLine, toColumn, toLayer)
gelem
- objectfromLine
- the line number originfromColumn
- the column number originfromLayer
- the origin layertoLine
- the line number destinationtoColumn
- the column number destinationtoLayer
- the destination layerpublic void move(Gelem gelem, int fromLine, int fromColumn, int toLine, int toColumn)
requires: active()
requires: gelem != null
requires: validPosition(fromLine, fromColumn)
requires: validPosition(toLine, toColumn)
requires: exists(gelem, fromLine, fromColumn)
requires: (fromLine == toLine && fromColumn == toColumn) || !exists(gelem, toLine, toColumn)
gelem
- objectfromLine
- the line number originfromColumn
- the column number origintoLine
- the line number destinationtoColumn
- the column number destinationpublic void draw(Gelem gelem, int line, int column, int layer)
requires: active()
requires: gelem != null
requires: validPosition(line, column)
requires: validLayer(layer)
requires: !exists(gelem, line, column, layer)
requires: gelemFitsInside(gelem, line, column)
ensures: exists(gelem, line, column, layer)
gelem
- objectline
- the line numbercolumn
- the column numberlayer
- the layer numberpublic void erase(Gelem gelem, int line, int column, int layer)
requires: active()
requires: gelem != null
requires: validPosition(line, column)
requires: validLayer(layer)
requires: exists(gelem, line, column, layer)
ensures: !exists(gelem, line, column, layer)
gelem
- objectline
- the line numbercolumn
- the column numberlayer
- the layer numberpublic void erase(Gelem gelem, int line, int column)
requires: active()
requires: gelem != null
requires: validPosition(line, column)
requires: exists(gelem, line, column)
ensures: !exists(gelem, line, column)
gelem
- objectline
- the line numbercolumn
- the column numberpublic void erase(int line, int column, int minLayer, int maxLayer)
[minLayer, maxLayer]
.
requires: active()
requires: validPosition(line, column)
requires: validLayer(minLayer)
requires: validLayer(maxLayer)
requires: maxLayer >= minLayer;
line
- the line numbercolumn
- the column numberminLayer
- the lower layer numbermaxLayer
- the higher (topest) layer numberpublic void erase(int line, int column)
requires: active()
requires: validPosition(line, column)
line
- the line numbercolumn
- the column numberpublic void eraseAll()
requires: active()
public void eraseAll(int minLayer, int maxLayer)
[minLayer, maxLayer]
.
requires: active()
requires: validLayer(minLayer)
requires: validLayer(maxLayer)
requires: maxLayer >= minLayer;
minLayer
- the lower layer numbermaxLayer
- the higher (topest) layer numberpublic void pushInputHandler(GBoardInputHandler handler)
requires: active()
requires: handler != null
handler
- the input handler obejct'spublic void popInputHandler()
requires: inputListenerExists();
public boolean inputListenerExists()
boolean
true if existspublic void mutableDraw(Gelem gelem, int line, int column, int layer)
requires: active()
requires: gelem != null
requires: validPosition(line, column)
requires: validLayer(layer)
requires: exists(gelem, line, column, layer)
gelem
- objectline
- the line numbercolumn
- the column numberlayer
- the layer numberpublic void mutableErase(Gelem gelem, int line, int column, int layer)
requires: active()
requires: gelem != null
requires: validPosition(line, column)
requires: validLayer(layer)
requires: exists(gelem, line, column, layer)
gelem
- objectline
- the line numbercolumn
- the column numberlayer
- the layer numberpublic int cellWidth()
int
number of pixelspublic int cellHeight()
int
number of pixelspublic static void sleep(int msec)
msec
milliseconds.
requires: msec >= 0
ensures: not interrupted!
msec
- durationpublic java.awt.Dimension getPreferredSize()
getPreferredSize
in class javax.swing.JComponent
public javax.swing.JFrame frame()
public java.awt.Container contentPane()