From 816c1aea489f402fecdc6f19bc6eeb44d86ee4f2 Mon Sep 17 00:00:00 2001 From: aah13002 Date: Wed, 30 Mar 2016 20:33:15 -0400 Subject: [PATCH] GUI piece selection is now working --- src/view/CheckersCanvas.java | 85 ++++++++++++++++++++++++++++++++---- src/view/CheckersWindow.java | 5 ++- src/view/GUIPiece.java | 7 ++- src/view/Square.java | 66 +++++++++++++++++++++++++--- 4 files changed, 146 insertions(+), 17 deletions(-) diff --git a/src/view/CheckersCanvas.java b/src/view/CheckersCanvas.java index 8e7292c..1822137 100644 --- a/src/view/CheckersCanvas.java +++ b/src/view/CheckersCanvas.java @@ -3,37 +3,46 @@ import java.awt.Color; import java.awt.GridBagConstraints; import java.awt.GridLayout; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; import java.util.ArrayList; +import javax.swing.BorderFactory; import javax.swing.JPanel; import model.Board; -public class CheckersCanvas extends JPanel { - +public class CheckersCanvas extends JPanel implements MouseListener { + public static final int BOARD_DIM = 8; - - ArrayList blackSquares; - ArrayList redSquares; - + + private ArrayList blackSquares; + private ArrayList redSquares; + + private Square moveDestination; + private Square moveSource; + /* Checker board representation */ Board board; GridBagConstraints layoutConstraints; - + public CheckersCanvas() { super(new GridLayout(BOARD_DIM, BOARD_DIM)); this.blackSquares = new ArrayList(); this.redSquares = new ArrayList(); initSquares(); } - + public void initSquares() { for (int i = 0; i < BOARD_DIM; ++i) { if (i % 2 == 0) { for (int j = 0; j < BOARD_DIM/2; ++j) { Square black = new Square(Color.BLACK, i, j*2); - black.add(new GUIPiece(Color.WHITE)); + black.addMouseListener(this); + GUIPiece p = new GUIPiece(Color.WHITE); + black.setPiece(new GUIPiece(Color.WHITE)); Square red = new Square(Color.RED, i, j*2 + 1); + red.addMouseListener(this); this.add(black); blackSquares.add(black); this.add(red); @@ -42,7 +51,9 @@ public void initSquares() { } else { for (int j = 0; j < BOARD_DIM/2; ++j) { Square black = new Square(Color.BLACK, i, j*2 + 1); + black.addMouseListener(this); Square red = new Square(Color.RED, i, j*2); + red.addMouseListener(this); this.add(red); blackSquares.add(red); this.add(black); @@ -51,4 +62,60 @@ public void initSquares() { } } } + + @Override + public void mouseClicked(MouseEvent arg0) { + + + } + + @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) { + Square square = (Square) e.getComponent(); + if(square.hasPiece()) { + if (!square.isSelected()) { + square.setSelected(true); + if (moveSource != null) + moveSource.setSelected(false); + if (moveDestination != null) + moveDestination.setSelected(false); + moveDestination = null; + moveSource = square; + } else { + if (square == moveSource) + moveSource = null; + square.setSelected(false); + } + } else { + + if (!square.isSelected()) { + square.setSelected(true); + if (moveDestination != null) + moveDestination.setSelected(false); + moveDestination = square; + } else { + if (square == moveDestination) + moveDestination = null; + square.setSelected(false); + } + } + + } + + @Override + public void mouseReleased(MouseEvent e) { + + } } diff --git a/src/view/CheckersWindow.java b/src/view/CheckersWindow.java index c7ad350..4000b13 100644 --- a/src/view/CheckersWindow.java +++ b/src/view/CheckersWindow.java @@ -1,5 +1,7 @@ package view; +import java.awt.BorderLayout; + import javax.swing.JFrame; public class CheckersWindow extends JFrame { @@ -13,8 +15,9 @@ public CheckersWindow() { this.setSize(WIDTH, HEIGHT); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setLocationRelativeTo(null); - this.getContentPane().add(new CheckersCanvas()); + this.getContentPane().add(new CheckersCanvas(), BorderLayout.CENTER); this.setVisible(true); + this.setResizable(false); //pack(); } diff --git a/src/view/GUIPiece.java b/src/view/GUIPiece.java index 72c121e..159b281 100644 --- a/src/view/GUIPiece.java +++ b/src/view/GUIPiece.java @@ -5,6 +5,7 @@ import java.awt.Graphics2D; import java.awt.RenderingHints; +import javax.swing.BorderFactory; import javax.swing.JButton; public class GUIPiece extends JButton { @@ -15,6 +16,8 @@ public GUIPiece(Color color) { this.color = color; this.setContentAreaFilled(false); this.setBorderPainted(false); + this.setFocusable(false); + this.setOpaque(false); } protected void paintComponent(Graphics g) { @@ -29,8 +32,8 @@ protected void paintComponent(Graphics g) { hints.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); hints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2.setRenderingHints(hints); - g2.fillOval(0, 0, getSize().width,getSize().height-1); + g2.fillOval(5, 5, getSize().width-10,getSize().height-10); super.paintComponent(g2); - } + } } diff --git a/src/view/Square.java b/src/view/Square.java index 1b54205..8f0a264 100644 --- a/src/view/Square.java +++ b/src/view/Square.java @@ -2,24 +2,27 @@ import java.awt.BorderLayout; import java.awt.Color; -import java.awt.Dimension; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; -import javax.swing.JButton; +import javax.swing.BorderFactory; +import javax.swing.JPanel; -public class Square extends JButton { +public class Square extends JPanel implements MouseListener { private Color color; private int row; private int column; private GUIPiece piece; + private boolean selected; public Square(Color color, int row, int column) { - super(""); + super(); this.color = color; this.setRow(row); + this.selected = false; this.setColumn(column); this.setBackground(color); this.setLayout(new BorderLayout()); - //this.setPreferredSize(new Dimension(100, 100)); } public int getRow() { @@ -44,6 +47,59 @@ public GUIPiece getPiece() { public void setPiece(GUIPiece piece) { this.piece = piece; + this.add(piece); + piece.addMouseListener(this); + this.validate(); + } + + public boolean isSelected() { + return selected; + } + + public void setSelected(boolean val) { + if (val) { + System.out.println("setting border"); + this.setBorder(BorderFactory.createLineBorder(Color.WHITE)); + } else { + this.setBorder(null); + } + this.selected = val; + } + + public boolean hasPiece() { + return piece != null; + } + + @Override + public void mouseClicked(MouseEvent arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void mouseEntered(MouseEvent arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void mouseExited(MouseEvent arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void mousePressed(MouseEvent e) { + MouseEvent newE = new MouseEvent(this, e.getID(), e.getWhen(), e.getModifiers(), + e.getClickCount(), e.getX(), e.getY(), e.isPopupTrigger()); + this.dispatchEvent(newE); + + } + + @Override + public void mouseReleased(MouseEvent arg0) { + // TODO Auto-generated method stub + }