Search code examples
javaswingmouseeventchess

Linking MouseEvents from one Java file to another Java File


Some background I am developing a game in java, I am using Netbeans to build it I currently have 3 java files

  • App.java
  • Board.java
  • Piece.java

Currently When it runs it shows the user a simple chess board with all the pieces in the right positions etc.

That is all done in Board.java

My Problem is the movement for the pieces is done in Piece.java currently I have the white pawn coded and the mouse events that control it but when i run the program the board appears along with the pieces but none of the pieces move not even the white pawn

and I am stumped to as why, I think maybe I have not linked them probably with the board or something along those lines or maybe there is something u with my mouseevents

Also I am not getting any errors in my code when it run

Here are the java files

App.java

package chessgame;

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import static javax.swing.WindowConstants.DISPOSE_ON_CLOSE;

public class App {    
    public static void main(String[] args) {
        JFrame frame = new Board();
        frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE );
        frame.pack();
        frame.setResizable(true);
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
     }
 }

Board.java

package chessgame;

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import static javax.swing.WindowConstants.DISPOSE_ON_CLOSE;

public class Board extends JFrame {

    JLayeredPane layeredPane;
    JPanel chessBoard;
    JLabel chessPiece;
    int xAdjustment;
    int yAdjustment;
    int startX;
    int startY;
    int initialX;
    int initialY;
    JPanel panels;
    JLabel pieces;

    public Board() {
        Dimension boardSize = new Dimension(600, 600);

        //  This is a Layered Pane for this application
        layeredPane = new JLayeredPane();
        getContentPane().add(layeredPane);
        layeredPane.setPreferredSize(boardSize);

        //Add a chess board to the Layered Pane
        chessBoard = new JPanel();
        layeredPane.add(chessBoard, JLayeredPane.DEFAULT_LAYER);
        chessBoard.setLayout(new GridLayout(8, 8));
        chessBoard.setPreferredSize(boardSize);
        chessBoard.setBounds(0, 0, boardSize.width, boardSize.height);

        for (int i = 0; i < 64; i++) {
            JPanel square = new JPanel(new BorderLayout());
            chessBoard.add(square);

            int row = (i / 8) % 2;
            if (row == 0) {
                square.setBackground(i % 2 == 0 ? Color.white : Color.gray);
            } else {
                square.setBackground(i % 2 == 0 ? Color.gray : Color.white);
            }
        }
        // Setting up the Initial Chess board.
        //White Side
        for (int i = 8; i < 16; i++) {
            pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhitePawn.png")));
            panels = (JPanel) chessBoard.getComponent(i);
            panels.add(pieces);
        }
        pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhiteRook.png")));
        panels = (JPanel) chessBoard.getComponent(0);
        panels.add(pieces);
        pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhiteKnight.png")));
        panels = (JPanel) chessBoard.getComponent(1);
        panels.add(pieces);
        pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhiteKnight.png")));
        panels = (JPanel) chessBoard.getComponent(6);
        panels.add(pieces);
        pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhiteBishup.png")));
        panels = (JPanel) chessBoard.getComponent(2);
        panels.add(pieces);
        pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhiteBishup.png")));
        panels = (JPanel) chessBoard.getComponent(5);
        panels.add(pieces);
        pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhiteKing.png")));
        panels = (JPanel) chessBoard.getComponent(3);
        panels.add(pieces);
        pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhiteQueen.png")));
        panels = (JPanel) chessBoard.getComponent(4);
        panels.add(pieces);
        pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhiteRook.png")));
        panels = (JPanel) chessBoard.getComponent(7);
        panels.add(pieces);

        //Black Side
        for (int i = 48; i < 56; i++) {
            pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/BlackPawn.png")));
            panels = (JPanel) chessBoard.getComponent(i);
            panels.add(pieces);
        }
        pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/BlackRook.png")));
        panels = (JPanel) chessBoard.getComponent(56);
        panels.add(pieces);
        pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/BlackKnight.png")));
        panels = (JPanel) chessBoard.getComponent(57);
        panels.add(pieces);
        pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/BlackKnight.png")));
        panels = (JPanel) chessBoard.getComponent(62);
        panels.add(pieces);
        pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/BlackBishup.png")));
        panels = (JPanel) chessBoard.getComponent(58);
        panels.add(pieces);
        pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/BlackBishup.png")));
        panels = (JPanel) chessBoard.getComponent(61);
        panels.add(pieces);
        pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/BlackKing.png")));
        panels = (JPanel) chessBoard.getComponent(59);
        panels.add(pieces);
        pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/BlackQueen.png")));
        panels = (JPanel) chessBoard.getComponent(60);
        panels.add(pieces);
        pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/BlackRook.png")));
        panels = (JPanel) chessBoard.getComponent(63);
        panels.add(pieces);
    }
}

Piece.java

    package chessgame;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Piece extends JLabel implements MouseListener, MouseMotionListener {

    public Piece(ImageIcon icon) { super(icon); }

    JLayeredPane layeredPane;
    JPanel chessBoard;
    JLabel chessPiece;
    int xAdjustment;
    int yAdjustment;
    int startX;
    int startY;
    int initialX;
    int initialY;
    JPanel panels;
    JLabel pieces;

    /*
     This method checks if there is a piece present on a particular square.
     */
    private Boolean piecePresent(int x, int y) {
        Component c = chessBoard.findComponentAt(x, y);
        if (c instanceof JPanel) {
            return false;
        } else {
            return true;
        }
    }

    /*
     This is a method to check if a piece is a Black piece.
     */
    private Boolean checkWhiteOponent(int newX, int newY) {
        Boolean oponent;
        Component c1 = chessBoard.findComponentAt(newX, newY);
        JLabel awaitingPiece = (JLabel) c1;
        String tmp1 = awaitingPiece.getIcon().toString();
        if (((tmp1.contains("Black")))) {
            oponent = true;
        } else {
            oponent = false;
        }
        return oponent;
    }

    /*
     This method is called when we press the Mouse. So we need to find out what piece we have 
     selected. We may also not have selected a piece!
     */
    public void mousePressed(MouseEvent e) {
        chessPiece = null;
        Component c = chessBoard.findComponentAt(e.getX(), e.getY());
        if (c instanceof JPanel) {
            return;
        }

        Point parentLocation = c.getParent().getLocation();
        xAdjustment = parentLocation.x - e.getX();
        yAdjustment = parentLocation.y - e.getY();
        chessPiece = (JLabel) c;
        initialX = e.getX();
        initialY = e.getY();
        startX = (e.getX() / 75);
        startY = (e.getY() / 75);
        chessPiece.setLocation(e.getX() + xAdjustment, e.getY() + yAdjustment);
        chessPiece.setSize(chessPiece.getWidth(), chessPiece.getHeight());
        layeredPane.add(chessPiece, JLayeredPane.DRAG_LAYER);
    }

    public void mouseDragged(MouseEvent me) {
        if (chessPiece == null) {
            return;
        }
        chessPiece.setLocation(me.getX() + xAdjustment, me.getY() + yAdjustment);
    }

    /*
     This method is used when the Mouse is released...we need to make sure the move was valid before 
     putting the piece back on the board.
     */
    public void mouseReleased(MouseEvent e) {
        if (chessPiece == null) {
            return;
        }

        chessPiece.setVisible(false);
        Boolean success = false;
        Component c = chessBoard.findComponentAt(e.getX(), e.getY());
        String tmp = chessPiece.getIcon().toString();
        String pieceName = tmp.substring(0, (tmp.length() - 4));
        Boolean validMove = false;

        if (pieceName.equals("WhitePawn")) {
            if (startY == 1) {
                if ((startX == (e.getX() / 75)) && ((((e.getY() / 75) - startY) == 1) || ((e.getY() / 75) - startY) == 2)) {
                    if ((((e.getY() / 75) - startY) == 2)) {
                        if ((!piecePresent(e.getX(), (e.getY()))) && (!piecePresent(e.getX(), (e.getY() + 75)))) {
                            validMove = true;
                        } else {
                            validMove = false;
                        }
                    } else {
                        if ((!piecePresent(e.getX(), (e.getY())))) {
                            validMove = true;
                        } else {
                            validMove = false;
                        }
                    }
                } else {
                    validMove = false;
                }
            } else {
                int newY = e.getY() / 75;
                int newX = e.getX() / 75;
                if ((startX - 1 >= 0) || (startX + 1 <= 7)) {
                    if ((piecePresent(e.getX(), (e.getY()))) && ((((newX == (startX + 1) && (startX + 1 <= 7))) || ((newX == (startX - 1)) && (startX - 1 >= 0))))) {
                        if (checkWhiteOponent(e.getX(), e.getY())) {
                            validMove = true;
                            if (startY == 6) {
                                success = true;
                            }
                        } else {
                            validMove = false;
                        }
                    } else {
                        if (!piecePresent(e.getX(), (e.getY()))) {
                            if ((startX == (e.getX() / 75)) && ((e.getY() / 75) - startY) == 1) {
                                if (startY == 6) {
                                    success = true;
                                }
                                validMove = true;
                            } else {
                                validMove = false;
                            }
                        } else {
                            validMove = false;
                        }
                    }
                } else {
                    validMove = false;
                }
            }
        }
        if (!validMove) {
            int location = 0;
            if (startY == 0) {
                location = startX;
            } else {
                location = (startY * 8) + startX;
            }
            String pieceLocation = pieceName + ".png";
            pieces = new JLabel(new ImageIcon(pieceLocation));
            panels = (JPanel) chessBoard.getComponent(location);
            panels.add(pieces);
        } else {
            if (success) {
                int location = 56 + (e.getX() / 75);
                if (c instanceof JLabel) {
                    Container parent = c.getParent();
                    parent.remove(0);
                    pieces = new JLabel(new ImageIcon("WhiteQueen.png"));
                    parent = (JPanel) chessBoard.getComponent(location);
                    parent.add(pieces);
                } else {
                    Container parent = (Container) c;
                    pieces = new JLabel(new ImageIcon("WhiteQueen.png"));
                    parent = (JPanel) chessBoard.getComponent(location);
                    parent.add(pieces);
                }
            } else {
                if (c instanceof JLabel) {
                    Container parent = c.getParent();
                    parent.remove(0);
                    parent.add(chessPiece);
                } else {
                    Container parent = (Container) c;
                    parent.add(chessPiece);
                }
                chessPiece.setVisible(true);
            }
        }
    }

    public void mouseClicked(MouseEvent e) {

    }

    public void mouseMoved(MouseEvent e) {
    }

    public void mouseEntered(MouseEvent e) {

    }

    public void mouseExited(MouseEvent e) {

    }
}

Also here is a screenshot of the layout in netbeans

enter image description here

Any help or tips for would welcomed

Here is the Source File in which everything is written in one giant file the pieces can be moved and the white pawn moves right, that is how I know the piece is coded right i just can see to link the events know that they are separate

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

/*
    This class can be used as a starting point for creating your Chess game project. The only piece that 
    has been coded is a white pawn...a lot done, more to do!
*/

public class ChessProject extends JFrame implements MouseListener, MouseMotionListener {
    JLayeredPane layeredPane;
    JPanel chessBoard;
    JLabel chessPiece;
    int xAdjustment;
    int yAdjustment;
    int startX;
    int startY;
    int initialX;
    int initialY;
    JPanel panels;
    JLabel pieces;


    public ChessProject(){
        Dimension boardSize = new Dimension(600, 600);

        //  Use a Layered Pane for this application
        layeredPane = new JLayeredPane();
        getContentPane().add(layeredPane);
        layeredPane.setPreferredSize(boardSize);
        layeredPane.addMouseListener(this);
        layeredPane.addMouseMotionListener(this);

        //Add a chess board to the Layered Pane 
        chessBoard = new JPanel();
        layeredPane.add(chessBoard, JLayeredPane.DEFAULT_LAYER);
        chessBoard.setLayout( new GridLayout(8, 8) );
        chessBoard.setPreferredSize( boardSize );
        chessBoard.setBounds(0, 0, boardSize.width, boardSize.height);

        for (int i = 0; i < 64; i++) {
            JPanel square = new JPanel( new BorderLayout() );
            chessBoard.add( square );

            int row = (i / 8) % 2;
            if (row == 0)
                square.setBackground( i % 2 == 0 ? Color.white : Color.gray );
            else
                square.setBackground( i % 2 == 0 ? Color.gray : Color.white );
        }

        // Setting up the Initial Chess board.
        for(int i=8;i < 16; i++){           
            pieces = new JLabel( new ImageIcon("WhitePawn.png") );
            panels = (JPanel)chessBoard.getComponent(i);
            panels.add(pieces);         
        }
        pieces = new JLabel( new ImageIcon("WhiteRook.png") );
        panels = (JPanel)chessBoard.getComponent(0);
        panels.add(pieces);
        pieces = new JLabel( new ImageIcon("WhiteKnight.png") );
        panels = (JPanel)chessBoard.getComponent(1);
        panels.add(pieces);
        pieces = new JLabel( new ImageIcon("WhiteKnight.png") );
        panels = (JPanel)chessBoard.getComponent(6);
        panels.add(pieces);
        pieces = new JLabel( new ImageIcon("WhiteBishup.png") );
        panels = (JPanel)chessBoard.getComponent(2);
        panels.add(pieces);
        pieces = new JLabel( new ImageIcon("WhiteBishup.png") );
        panels = (JPanel)chessBoard.getComponent(5);
        panels.add(pieces);
        pieces = new JLabel( new ImageIcon("WhiteKing.png") );
        panels = (JPanel)chessBoard.getComponent(3);
        panels.add(pieces);
        pieces = new JLabel( new ImageIcon("WhiteQueen.png") );
        panels = (JPanel)chessBoard.getComponent(4);
        panels.add(pieces);
        pieces = new JLabel( new ImageIcon("WhiteRook.png") );
        panels = (JPanel)chessBoard.getComponent(7);
        panels.add(pieces);
        for(int i=48;i < 56; i++){          
            pieces = new JLabel( new ImageIcon("BlackPawn.png") );
            panels = (JPanel)chessBoard.getComponent(i);
            panels.add(pieces);         
        }
        pieces = new JLabel( new ImageIcon("BlackRook.png") );
        panels = (JPanel)chessBoard.getComponent(56);
        panels.add(pieces);
        pieces = new JLabel( new ImageIcon("BlackKnight.png") );
        panels = (JPanel)chessBoard.getComponent(57);
        panels.add(pieces);
        pieces = new JLabel( new ImageIcon("BlackKnight.png") );
        panels = (JPanel)chessBoard.getComponent(62);
        panels.add(pieces);
        pieces = new JLabel( new ImageIcon("BlackBishup.png") );
        panels = (JPanel)chessBoard.getComponent(58);
        panels.add(pieces);
        pieces = new JLabel( new ImageIcon("BlackBishup.png") );
        panels = (JPanel)chessBoard.getComponent(61);
        panels.add(pieces);
        pieces = new JLabel( new ImageIcon("BlackKing.png") );
        panels = (JPanel)chessBoard.getComponent(59);
        panels.add(pieces);
        pieces = new JLabel( new ImageIcon("BlackQueen.png") );
        panels = (JPanel)chessBoard.getComponent(60);
        panels.add(pieces);
        pieces = new JLabel( new ImageIcon("BlackRook.png") );
        panels = (JPanel)chessBoard.getComponent(63);
        panels.add(pieces);     
    }

    /*
        This method checks if there is a piece present on a particular square.
    */
    private Boolean piecePresent(int x, int y){
        Component c = chessBoard.findComponentAt(x, y);
        if(c instanceof JPanel){
            return false;
        }
        else{
            return true;
        }
    }

    /*
        This is a method to check if a piece is a Black piece.
    */
    private Boolean checkWhiteOponent(int newX, int newY){
        Boolean oponent;
        Component c1 = chessBoard.findComponentAt(newX, newY);
        JLabel awaitingPiece = (JLabel)c1;
        String tmp1 = awaitingPiece.getIcon().toString();           
        if(((tmp1.contains("Black")))){
            oponent = true;
        }
        else{
            oponent = false; 
        }       
        return oponent;
    }   

    /*
        This method is called when we press the Mouse. So we need to find out what piece we have 
        selected. We may also not have selected a piece!
    */
    public void mousePressed(MouseEvent e){
        chessPiece = null;
        Component c =  chessBoard.findComponentAt(e.getX(), e.getY());
        if (c instanceof JPanel) 
            return;

        Point parentLocation = c.getParent().getLocation();
        xAdjustment = parentLocation.x - e.getX();
        yAdjustment = parentLocation.y - e.getY();
        chessPiece = (JLabel)c;
        initialX = e.getX();
        initialY = e.getY();
        startX = (e.getX()/75);
        startY = (e.getY()/75);
        chessPiece.setLocation(e.getX() + xAdjustment, e.getY() + yAdjustment);
        chessPiece.setSize(chessPiece.getWidth(), chessPiece.getHeight());
        layeredPane.add(chessPiece, JLayeredPane.DRAG_LAYER);
    }

    public void mouseDragged(MouseEvent me) {
        if (chessPiece == null) return;
         chessPiece.setLocation(me.getX() + xAdjustment, me.getY() + yAdjustment);
     }

    /*
        This method is used when the Mouse is released...we need to make sure the move was valid before 
        putting the piece back on the board.
    */
    public void mouseReleased(MouseEvent e) {
        if(chessPiece == null) return;

        chessPiece.setVisible(false);
        Boolean success =false;
        Component c =  chessBoard.findComponentAt(e.getX(), e.getY());
        String tmp = chessPiece.getIcon().toString();
        String pieceName = tmp.substring(0, (tmp.length()-4));
        Boolean validMove = false;

        /*
            The only piece that has been enabled to move is a White Pawn...but we should really have this is a separate
            method somewhere...how would this work.

            So a Pawn is able to move two squares forward one its first go but only one square after that. 
            The Pawn is the only piece that cannot move backwards in chess...so be careful when committing 
            a pawn forward. A Pawn is able to take any of the opponent’s pieces but they have to be one 
            square forward and one square over, i.e. in a diagonal direction from the Pawns original position. 
            If a Pawn makes it to the top of the other side, the Pawn can turn into any other piece, for 
            demonstration purposes the Pawn here turns into a Queen.
        */
        if(pieceName.equals("WhitePawn")){
            if(startY == 1)
            {
                if((startX == (e.getX()/75))&&((((e.getY()/75)-startY)==1)||((e.getY()/75)-startY)==2))
                {
                    if((((e.getY()/75)-startY)==2)){
                        if((!piecePresent(e.getX(), (e.getY())))&&(!piecePresent(e.getX(), (e.getY()+75)))){
                            validMove = true;                   
                        }
                        else{
                            validMove = false;
                        }                           
                    }
                    else{
                        if((!piecePresent(e.getX(), (e.getY()))))
                        {
                            validMove = true;                   
                        }   
                        else{
                            validMove = false;
                        }                                                   
                    }
                }
                else{
                    validMove = false;                  
                }
            }
            else{
                int newY = e.getY()/75;
                int newX = e.getX()/75;             
                if((startX-1 >=0)||(startX +1 <=7))
                {
                    if((piecePresent(e.getX(), (e.getY())))&&((((newX == (startX+1)&&(startX+1<=7)))||((newX == (startX-1))&&(startX-1 >=0)))))
                    {
                        if(checkWhiteOponent(e.getX(), e.getY())){
                            validMove = true;
                            if(startY == 6){
                                success = true;
                            }                       
                        }
                        else{
                            validMove = false;
                        }
                    }
                    else{
                        if(!piecePresent(e.getX(), (e.getY()))){
                            if((startX == (e.getX()/75))&&((e.getY()/75)-startY)==1){
                                if(startY == 6){
                                    success = true;
                                }
                                validMove = true;
                            }
                            else{
                                validMove = false;
                            }               
                        }
                        else{
                            validMove = false;  
                        }
                    }
                }
                else{
                    validMove = false;
                }               
            }           
        }
        if(!validMove){     
            int location=0;
            if(startY ==0){
                location = startX;
            }
            else{
                location  = (startY*8)+startX;
            }
            String pieceLocation = pieceName+".png"; 
            pieces = new JLabel( new ImageIcon(pieceLocation) );
            panels = (JPanel)chessBoard.getComponent(location);
            panels.add(pieces);         
        }
        else{
            if(success){
                int location = 56 + (e.getX()/75);
                if (c instanceof JLabel){
                    Container parent = c.getParent();
                    parent.remove(0);
                    pieces = new JLabel( new ImageIcon("WhiteQueen.png") );
                    parent = (JPanel)chessBoard.getComponent(location);
                    parent.add(pieces);         
                }
                else{
                    Container parent = (Container)c;
                    pieces = new JLabel( new ImageIcon("WhiteQueen.png") );
                    parent = (JPanel)chessBoard.getComponent(location);
                    parent.add(pieces);                 
                }
            }
            else{
                if (c instanceof JLabel){
                    Container parent = c.getParent();
                    parent.remove(0);
                    parent.add( chessPiece );
                }
                else {
                    Container parent = (Container)c;
                    parent.add( chessPiece );
                }
                chessPiece.setVisible(true);                                    
            }
        }
    }

    public void mouseClicked(MouseEvent e) {

    }
    public void mouseMoved(MouseEvent e) {
   }
    public void mouseEntered(MouseEvent e){

    }
    public void mouseExited(MouseEvent e) {

    }

    /*
        Main method that gets the ball moving.
    */
    public static void main(String[] args) {
        JFrame frame = new ChessProject();
        frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE );
        frame.pack();
        frame.setResizable(true);
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
     }
}

Solution

  • You never create an instance of Piece, not even once, so it has no means by which it could ever respond to any events, it's not even on the screen...

    I "think" you want to do something more like...

    pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhiteRook.png")));
    

    ...Note, you'll need to update Piece to support been constructed with a ImageIcon

    There's also a bunch of issues with Piece. You have a bunch instance fields...

    JLayeredPane layeredPane;
    JPanel chessBoard;
    JLabel chessPiece;
    //...
    JPanel panels;
    JLabel pieces;
    

    Which aren't linked to anything (they are null) which is going to cause you no end of issues.

    Instead of focusing all the management within the UI, consider trying to use more of a MVC model. The game logic, rules and state should be maintain within a model, which has NO UI logic at all. It basically allows you to take a piece and make a move, validating that process as it goes. It would then provide notifications back to the UI, via an observer pattern which would notify the UI that some state has changed...

    Updated...

    Update the constructor of Piece so it can take a reference to an Icon and pass it onto it's parent, this way, you can continue using the code you already have...

    public Piece(Icon icon) { 
        super(icon); 
    }
    

    Next, when you create a Piece, you need to install a MouseListener to it. In this case, I'd be tempted to make the board responsible for the management of the pieces, it knows the layout and where all the pieces are...

    pieces = new Piece(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhiteRook.png")));
    pieces.addMouseListener(this);