package Puzzle; import java.awt.*; import java.awt.event.*; /** * PuzzleTile - a class that mimics a button for use * in the 15-puzzle (actually N-puzzle) */ public class PuzzleTile extends Canvas { /** * Constructs a PuzzleTile with the specified label * @param label the label shown on the PuzzleTile */ public PuzzleTile(String label) { myLabel = label; enableEvents(AWTEvent.MOUSE_EVENT_MASK); // get mouse events } /** * paints the PuzzleTile * override this function for different appearance */ public void paint(Graphics g) { if (myLabel != PuzzleConsts.BLANK) { g.setColor(Color.blue); g.fill3DRect(0,0,SIZE,SIZE,true); g.setColor(Color.yellow); g.fill3DRect(OFFSET,OFFSET,SIZE,SIZE,true); g.setColor(Color.black); } else { g.setColor(getBackground()); g.fill3DRect(0,0,SIZE+OFFSET,SIZE+OFFSET,true); } g.drawString(myLabel,OFFSET + SIZE/2,OFFSET + SIZE/2); } /** * the preferred size of the PuzzleTile * @return Dimension that encapsulates the preferred size */ public Dimension getPreferredSize() { return new Dimension(SIZE+OFFSET+2,SIZE+OFFSET+2); } /** * if mouse is released, generate an action event */ public void processMouseEvent(MouseEvent ev) { switch (ev.getID()) { case MouseEvent.MOUSE_RELEASED: if (myListener != null) { myListener.actionPerformed(new ActionEvent( this,ActionEvent.ACTION_PERFORMED,myLabel)); } break; case MouseEvent.MOUSE_PRESSED: break; case MouseEvent.MOUSE_ENTERED: break; case MouseEvent.MOUSE_EXITED: break; } super.processMouseEvent(ev); } /** * Adds an action listener to the PuzzleTile * @param listener the action listener added */ public void addActionListener(ActionListener listener) { myListener = AWTEventMulticaster.add(myListener,listener); enableEvents(AWTEvent.MOUSE_EVENT_MASK); } /** * Removes an action listener from the PuzzleTile * @param listener the action listener to remove */ public void removeActionListner(ActionListener listener) { myListener = AWTEventMulticaster.remove(myListener,listener); } /** * set the label to the specified string * @param label the label displayed */ void setLabel(String label) { myLabel = label; } /** * returns label associated with tile * @return String representation of tile label */ public String getLabel() { return myLabel; } public String paramString() { return "label " + myLabel; } private ActionListener myListener; private String myLabel; protected final static int SIZE = 50; protected final static int OFFSET = 1; }