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.StoneColor;
import jrummikub.util.IListener;
import jrummikub.util.IListener1;
import jrummikub.view.IView;
public class JRummikub {
@ -58,6 +59,13 @@ public class JRummikub {
stones.put(new Stone(0, StoneColor.BLACK, true), new Position(3.5f, 0));
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

@ -21,5 +21,10 @@ public class Position {
public float getY() {
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.Stone;
import jrummikub.util.IEvent1;
public interface IBoard {
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.Insets;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Collections;
import java.util.Map;
@ -13,6 +15,9 @@ import javax.swing.JPanel;
import jrummikub.model.Position;
import jrummikub.model.Stone;
import jrummikub.util.Event1;
import jrummikub.util.IEvent;
import jrummikub.util.IEvent1;
import jrummikub.view.IBoard;
@SuppressWarnings("serial")
@ -21,11 +26,52 @@ public class Board extends JPanel implements IBoard {
private Map<Stone, Position> stones = Collections.emptyMap();
private StonePainter stonePainter = new StonePainter(StonePainter.BOARD_SCALE);
private Event1<Position> clickEvent = new Event1<Position>();
Board() {
super(true);
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

View file

@ -56,6 +56,18 @@ class StonePainter {
public float getScale() {
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) {
this.scale = scale;