2014-11-10 5 views
1

Некоторые фоне Я разрабатываю игру в Java, я использую Netbeans, чтобы построить его я в настоящее время есть 3 Java файлыLinking MouseEvents из одного Java-файла в другой файл Java

  • App.java
  • Совет. Java
  • Piece.java

в настоящее время Когда она работает она показывает пользователю простую шахматную доску со всеми частями в правильных положениях и т.д.

Это все сделано в Board.java

Моя проблема в том, что движение для кусков сделано в Piece.java, в настоящее время у меня есть белая пешка и мыши, которые управляют ею, но когда я запускаю программу на плату появляется вместе с кусками, но ни одна из фигур не перемещает даже белую пешку

и я в тупик, как, почему я думаю, что, возможно, я не связал их, вероятно, с доской или что-то в этом роде или, может быть, есть что-то u с моими мышьяками

Также у меня нет ошибок в моем коде при его запуске

Вот ява файлы

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) { 

    } 
} 

Также здесь скриншот макета в netbeans

enter image description here

Любая помощь или советы по бы приветствовали

Вот исходный файл, в котором все написано в одном гигантском файле части могут быть перемещены и белая пешка перемещается вправо, то есть, как я знаю, часть закодирована право я просто не могу видеть, чтобы связать события знают, что они являются отдельными

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); 
    } 
} 
+0

Вы никогда не создать экземпляр 'Piece' - нет никакого способа, чтобы он отвечал на любые фактические события и не имел никакого отношения к какой-либо другой части вашей программы ... – MadProgrammer

ответ

1

Вы никогда не создать экземпляр Piece, даже не один раз, так что не имеет средств, с помощью которого он мог реагировать на любые события , это даже не на экране ...

я «думаю» что вы хотите сделать что-то больше похоже на ...

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

... Обратите внимание, вам необходимо обновить Piece к поддержке была построена с ImageIcon

Там также куча вопросов с Piece. У вас есть поля экземпляра пучка ...

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

, которые не связаны ни к чему (они null), который собирается не причинить вам никакого конца проблем.

Вместо того, чтобы фокусировать все управление в пользовательском интерфейсе, подумайте о том, чтобы использовать больше MVC model. Логика игры, правила и состояние должны поддерживаться внутри модели, которая вообще не имеет логики UI. Это в основном позволяет вам взять кусок и сделать ход, подтверждая этот процесс, как он идет. Затем он будет предоставлять уведомления обратно в пользовательский интерфейс, через который observer pattern уведомит UI, что некоторое состояние изменилось ...

Обновлено ...

Update конструктор Piece поэтому он может занять ссылка на Icon и передать его на его родителей, таким образом, вы можете продолжать использовать код, который вы уже имеете ...

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

Далее, при создании Piece, вам необходимо установить MouseListener к нему. В этом случае, я был бы соблазн сделать совет, ответственный за управление частями, он знает расположение и где все части ...

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

Извините, я не понимаю, что вы имеете в виду, где бы я добавил код, который у вас есть, и что вы имеете в виду обновление Piece? вы можете показать мне более подробный ответ, используя доску и кусочный файл, который у меня выше – Jamiex304

+0

* «Обновить Piece» * - в принципе, 'Piece' не имеет подходящего конструктора для передачи' ImageIcon', вам нужно будет предоставить, который в основном называл бы 'super (icon)' ... Вышеприведенный код был разорван из вашего исходного кода (ищите 'WhiteRook.png'). Вы должны изменить 'JLabel' ro' Piece' вместо этого ... – MadProgrammer

+0

ОК, так что в board.java я могу изменить все Jlabel's Piece прямо? а затем как я могу сделать подходящий конструктор для передачи ImageIcon? – Jamiex304

Смежные вопросы