Official API for BoardPane with listener to react to user gestures.
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
6 package cz.xelfi.quoridor.visidor;
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;
15 /** JavaBean class that displays and can manipulate with Quoridor {@link Board}.
17 * @author Jaroslav Tulach <jtulach@netbeans.org>
19 public final class BoardPane extends JPanel {
20 private final Viewer viewer;
21 private final List<BoardListener> listeners = new CopyOnWriteArrayList<BoardListener>();
24 setLayout(new GridLayout(1,1));
25 viewer = new Viewer();
26 viewer.moveListener(this);
30 public final void setBoard(Board b) {
34 public final Board getBoard() {
35 return viewer.getBoard();
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
43 * @param editable read only or editable mode?
45 public final void setEditable(boolean editable) {
46 viewer.enableListeners(editable);
49 public final void addBoardListener(BoardListener l) {
52 public final void removeBoardListener(BoardListener l) {
56 final void moveHappened(Move m) {
58 for (BoardListener bl : listeners) {
60 ev = new BoardEvent(this, m);