Some background I am developing a game in java, I am using Netbeans to build it I currently have 2 java files
App.java
Board.java
Right Now I can create and display a simple chess board with all the pieces in the right positions the problem I am having is assigning any mouseevents to those chess pieces
Currently i wrote test code using textpad and no folder links for the images and have been able to get the mouse events to work there so I know there is no problem in the code for the events.
But Now that I am writing the program cleaner in Netbeans the mousevents don't work any more
So I am ammusing I am not linking them correctly to the new chess board and the new peieces
Here is the chess Board In netbeans (Not working version)
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 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 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 JLabel(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhitePawn.png")));
panels = (JPanel) chessBoard.getComponent(i);
panels.add(pieces);
}
pieces = new JLabel(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhiteRook.png")));
panels = (JPanel) chessBoard.getComponent(0);
panels.add(pieces);
pieces = new JLabel(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhiteKnight.png")));
panels = (JPanel) chessBoard.getComponent(1);
panels.add(pieces);
pieces = new JLabel(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhiteKnight.png")));
panels = (JPanel) chessBoard.getComponent(6);
panels.add(pieces);
pieces = new JLabel(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhiteBishup.png")));
panels = (JPanel) chessBoard.getComponent(2);
panels.add(pieces);
pieces = new JLabel(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhiteBishup.png")));
panels = (JPanel) chessBoard.getComponent(5);
panels.add(pieces);
pieces = new JLabel(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhiteKing.png")));
panels = (JPanel) chessBoard.getComponent(3);
panels.add(pieces);
pieces = new JLabel(new ImageIcon(getClass().getResource("/chessgame/PieceImages/WhiteQueen.png")));
panels = (JPanel) chessBoard.getComponent(4);
panels.add(pieces);
pieces = new JLabel(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 JLabel(new ImageIcon(getClass().getResource("/chessgame/PieceImages/BlackPawn.png")));
panels = (JPanel) chessBoard.getComponent(i);
panels.add(pieces);
}
pieces = new JLabel(new ImageIcon(getClass().getResource("/chessgame/PieceImages/BlackRook.png")));
panels = (JPanel) chessBoard.getComponent(56);
panels.add(pieces);
pieces = new JLabel(new ImageIcon(getClass().getResource("/chessgame/PieceImages/BlackKnight.png")));
panels = (JPanel) chessBoard.getComponent(57);
panels.add(pieces);
pieces = new JLabel(new ImageIcon(getClass().getResource("/chessgame/PieceImages/BlackKnight.png")));
panels = (JPanel) chessBoard.getComponent(62);
panels.add(pieces);
pieces = new JLabel(new ImageIcon(getClass().getResource("/chessgame/PieceImages/BlackBishup.png")));
panels = (JPanel) chessBoard.getComponent(58);
panels.add(pieces);
pieces = new JLabel(new ImageIcon(getClass().getResource("/chessgame/PieceImages/BlackBishup.png")));
panels = (JPanel) chessBoard.getComponent(61);
panels.add(pieces);
pieces = new JLabel(new ImageIcon(getClass().getResource("/chessgame/PieceImages/BlackKing.png")));
panels = (JPanel) chessBoard.getComponent(59);
panels.add(pieces);
pieces = new JLabel(new ImageIcon(getClass().getResource("/chessgame/PieceImages/BlackQueen.png")));
panels = (JPanel) chessBoard.getComponent(60);
panels.add(pieces);
pieces = new JLabel(new ImageIcon(getClass().getResource("/chessgame/PieceImages/BlackRook.png")));
panels = (JPanel) chessBoard.getComponent(63);
panels.add(pieces);
}
//Mouse Events For All Piece Interactions
//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) {
}
public void mouseClicked(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}
And here is the test code I wrote in textpad (Working Mousevents version)
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
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) {
}
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);
}
}
Currently the only thing the mosueevents are set up to do is allow the user to drag any piece they want anywhere on the board
Hopefully someone can see where I am going wrong with the linking of the events
Thank you in advance for any help you can provide
So, in your
ChessProject
you did...But in your
Board
project, you've made no such calls. Remember, if you want to be told about mouse events, you must register a listener for them