visidor/src/main/java/cz/xelfi/quoridor/visidor/BoardPane.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 05 Sep 2010 22:34:43 +0200
changeset 255 9ecd02d694cd
child 266 15fcdfc4cd4a
permissions -rw-r--r--
Official API for BoardPane with listener to react to user gestures.
     1 /*
     2  * To change this template, choose Tools | Templates
     3  * and open the template in the editor.
     4  */
     5 
     6 package cz.xelfi.quoridor.visidor;
     7 
     8 import cz.xelfi.quoridor.Board;
     9 import cz.xelfi.quoridor.Move;
    10 import java.awt.GridLayout;
    11 import java.util.List;
    12 import java.util.concurrent.CopyOnWriteArrayList;
    13 import javax.swing.JPanel;
    14 
    15 /** JavaBean class that displays and can manipulate with Quoridor {@link Board}.
    16  *
    17  * @author Jaroslav Tulach <jtulach@netbeans.org>
    18  */
    19 public final class BoardPane extends JPanel {
    20     private final Viewer viewer;
    21     private final List<BoardListener> listeners = new CopyOnWriteArrayList<BoardListener>();
    22     
    23     public BoardPane() {
    24         setLayout(new GridLayout(1,1));
    25         viewer = new Viewer();
    26         viewer.moveListener(this);
    27         add(viewer);
    28     }
    29     
    30     public final void setBoard(Board b) {
    31         viewer.setBoard(b);
    32     }
    33     
    34     public final Board getBoard() {
    35         return viewer.getBoard();
    36     }
    37 
    38     /** The board can either be in <q>view only</q> mode when showing state 
    39      * of the {@link Board} during opponent's move, or it can be editable.
    40      * In editable mode, one shall listen on changes delivered to 
    41      * BoardListener.
    42      * 
    43      * @param editable read only or editable mode?
    44      */
    45     public final void setEditable(boolean editable) {
    46         viewer.enableListeners(editable);
    47     }
    48     
    49     public final void addBoardListener(BoardListener l) {
    50         listeners.add(l);
    51     }
    52     public final void removeBoardListener(BoardListener l) {
    53         listeners.remove(l);
    54     }
    55     
    56     final void moveHappened(Move m) {
    57         BoardEvent ev = null;
    58         for (BoardListener bl : listeners) {
    59             if (ev == null) {
    60                 ev = new BoardEvent(this, m);
    61             }
    62             bl.boardChanged(ev);
    63         }
    64     }
    65 }