Sunday 15 April 2012

swing - Linking MouseEvents from one Java file to another Java File -



swing - Linking MouseEvents from one Java file to another Java File -

some background developing game in java, using netbeans build have 3 java files

app.java board.java piece.java

currently when runs shows user simple chess board pieces in right positions etc.

that done in board.java

my problem motion pieces done in piece.java have white pawn coded , mouse events command when run programme board appears along pieces none of pieces move not white pawn

and stumped why, think maybe have not linked them board or along lines or maybe there u mouseevents

also not getting errors in code when run

here 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); // layered pane application layeredpane = new jlayeredpane(); getcontentpane().add(layeredpane); layeredpane.setpreferredsize(boardsize); //add chess board 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); (int = 0; < 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 initial chess board. //white side (int = 8; < 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 (int = 48; < 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

bundle 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; /* method checks if there piece nowadays on particular square. */ private boolean piecepresent(int x, int y) { component c = chessboard.findcomponentat(x, y); if (c instanceof jpanel) { homecoming false; } else { homecoming true; } } /* method check if piece 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; } homecoming oponent; } /* method called when press mouse. need find out piece have selected. may not have selected 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); } /* method used when mouse released...we need create sure move valid before putting piece on 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 screenshot of layout in netbeans

any help or tips welcomed

here source file in written in 1 giant file pieces can moved , white pawn moves right, how know piece coded right can see link events know separate

import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; /* class can used starting point creating chess game project. piece has been coded white pawn...a lot done, more 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); // utilize layered pane application layeredpane = new jlayeredpane(); getcontentpane().add(layeredpane); layeredpane.setpreferredsize(boardsize); layeredpane.addmouselistener(this); layeredpane.addmousemotionlistener(this); //add chess board 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); (int = 0; < 64; i++) { jpanel square = new jpanel( new borderlayout() ); chessboard.add( square ); int row = (i / 8) % 2; if (row == 0) square.setbackground( % 2 == 0 ? color.white : color.gray ); else square.setbackground( % 2 == 0 ? color.gray : color.white ); } // setting 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); } /* method checks if there piece nowadays on particular square. */ private boolean piecepresent(int x, int y){ component c = chessboard.findcomponentat(x, y); if(c instanceof jpanel){ homecoming false; } else{ homecoming true; } } /* method check if piece 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; } homecoming oponent; } /* method called when press mouse. need find out piece have selected. may not have selected 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); } /* method used when mouse released...we need create sure move valid before putting piece on 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; /* piece has been enabled move white pawn...but should have separate method somewhere...how work. pawn able move 2 squares forwards 1 first go 1 square after that. pawn piece cannot move backwards in chess...so careful when committing pawn forward. pawn able take of opponent̢۪s pieces have 1 square forwards , 1 square over, i.e. in diagonal direction pawns original position. if pawn makes top of other side, pawn can turn other piece, demonstration purposes pawn here turns 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 gets 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); } }

you never create instance of piece, not once, has no means ever respond events, it's not on screen...

i "think" want more like...

pieces = new piece(new imageicon(getclass().getresource("/chessgame/pieceimages/whiterook.png")));

...note, you'll need update piece back upwards been constructed imageicon

there's bunch of issues piece. have bunch instance fields...

jlayeredpane layeredpane; jpanel chessboard; jlabel chesspiece; //... jpanel panels; jlabel pieces;

which aren't linked (they null) going cause no end of issues.

instead of focusing management within ui, consider trying utilize more of mvc model. game logic, rules , state should maintain within model, has no ui logic @ all. allows take piece , create move, validating process goes. provide notifications ui, via observer pattern notify ui state has changed...

updated...

update constructor of piece can take reference icon , pass onto it's parent, way, can go on using code have...

public piece(icon icon) { super(icon); }

next, when create piece, need install mouselistener it. in case, i'd tempted create board responsible management of pieces, knows layout , pieces are...

pieces = new piece(new imageicon(getclass().getresource("/chessgame/pieceimages/whiterook.png"))); pieces.addmouselistener(this);

java swing mouseevent chess

No comments:

Post a Comment