Added clickEvent to Board

git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@30 72836036-5685-4462-b002-a69064685172
This commit is contained in:
Matthias Schiffer 2011-04-30 17:56:10 +02:00
parent 5440eaba77
commit 36da8c8a17
5 changed files with 74 additions and 0 deletions

View file

@ -9,6 +9,7 @@ import jrummikub.model.Position;
import jrummikub.model.Stone; import jrummikub.model.Stone;
import jrummikub.model.StoneColor; import jrummikub.model.StoneColor;
import jrummikub.util.IListener; import jrummikub.util.IListener;
import jrummikub.util.IListener1;
import jrummikub.view.IView; import jrummikub.view.IView;
public class JRummikub { public class JRummikub {
@ -58,6 +59,13 @@ public class JRummikub {
stones.put(new Stone(0, StoneColor.BLACK, true), new Position(3.5f, 0)); stones.put(new Stone(0, StoneColor.BLACK, true), new Position(3.5f, 0));
view.getPlayerPanel().getBoard().setStones(stones); view.getPlayerPanel().getBoard().setStones(stones);
view.getPlayerPanel().getBoard().getClickEvent().add(new IListener1<Position>(){
@Override
public void fire(Position value) {
System.out.println("Board clicked at "+value);
}});
} }

View file

@ -22,4 +22,9 @@ public class Position {
return y; return y;
} }
@Override
public String toString(){
return "Position[x="+x+",y="+y+"]";
}
} }

View file

@ -4,7 +4,10 @@ import java.util.Map;
import jrummikub.model.Position; import jrummikub.model.Position;
import jrummikub.model.Stone; import jrummikub.model.Stone;
import jrummikub.util.IEvent1;
public interface IBoard { public interface IBoard {
public void setStones(Map<Stone, Position> stones); public void setStones(Map<Stone, Position> stones);
public IEvent1<Position> getClickEvent();
} }

View file

@ -5,6 +5,8 @@ import java.awt.Graphics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Insets; import java.awt.Insets;
import java.awt.RenderingHints; import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Collections; import java.util.Collections;
import java.util.Map; import java.util.Map;
@ -13,6 +15,9 @@ import javax.swing.JPanel;
import jrummikub.model.Position; import jrummikub.model.Position;
import jrummikub.model.Stone; import jrummikub.model.Stone;
import jrummikub.util.Event1;
import jrummikub.util.IEvent;
import jrummikub.util.IEvent1;
import jrummikub.view.IBoard; import jrummikub.view.IBoard;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@ -22,10 +27,51 @@ public class Board extends JPanel implements IBoard {
private Map<Stone, Position> stones = Collections.emptyMap(); private Map<Stone, Position> stones = Collections.emptyMap();
private StonePainter stonePainter = new StonePainter(StonePainter.BOARD_SCALE); private StonePainter stonePainter = new StonePainter(StonePainter.BOARD_SCALE);
private Event1<Position> clickEvent = new Event1<Position>();
Board() { Board() {
super(true); super(true);
setBorder(new CustomBorder(Color.DARK_GRAY, 0, 1, 0, 1)); setBorder(new CustomBorder(Color.DARK_GRAY, 0, 1, 0, 1));
addMouseListener(new MouseListener(){
@Override
public void mouseClicked(MouseEvent e) {
Insets insets = getInsets();
clickEvent.fire(stonePainter.calculatePosition(e.getX()-insets.left, e.getY()-insets.top));
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}});
}
@Override
public IEvent1<Position> getClickEvent() {
return clickEvent;
} }
@Override @Override

View file

@ -57,6 +57,18 @@ class StonePainter {
return scale; return scale;
} }
/**
* @param x x position in screen coordinates
* @param y y position in screen coordinates
* @return position in grid coordinates
*/
public Position calculatePosition(int x, int y){
float width = even(DEFAULT_WIDTH*scale);
float height = (int)(DEFAULT_WIDTH*scale/ASPECT_RATIO);
return new Position(x/width, y/height);
}
StonePainter(float scale) { StonePainter(float scale) {
this.scale = scale; this.scale = scale;
} }