Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用多态性移动不同子类的对象_Java_Polymorphism_Mouseevent_Abstract Class_Jcomponent - Fatal编程技术网

Java 使用多态性移动不同子类的对象

Java 使用多态性移动不同子类的对象,java,polymorphism,mouseevent,abstract-class,jcomponent,Java,Polymorphism,Mouseevent,Abstract Class,Jcomponent,在我用鼠标移动棋子之后,我正在尝试重新绘制它。move()方法应该在从MouseEvents获取实例字段变量后,将其放入实例字段变量,并将工件对象从其原始(源)位置移动到其目标位置。注意,Piece类是抽象的,包含7个不同的子类。但是,mouseevents已经实现,并且打印出正确的行和列,并且也正在打印虚拟件,但是新位置中的对象没有被打印。关于原因有什么建议吗 public class Chess extends JComponent implements MouseListener {

在我用鼠标移动棋子之后,我正在尝试重新绘制它。move()方法应该在从MouseEvents获取实例字段变量后,将其放入实例字段变量,并将工件对象从其原始(源)位置移动到其目标位置。注意,Piece类是抽象的,包含7个不同的子类。但是,mouseevents已经实现,并且打印出正确的行和列,并且也正在打印虚拟件,但是新位置中的对象没有被打印。关于原因有什么建议吗

public class Chess extends JComponent implements MouseListener {



     public static final int ROW = 8, COLUMN = 8; 

     private Piece[][] chessPieces=new Piece[ROWS][COLS];



     private int sourceR,destR,sourceC,destC;




 public void  move () {

     chessPieces[destR][destC]=chessPieces[sourceR][sourceC]; 
   //This is not taking the Piece object and moving it to the new place?!



      System.out.print("destR is "+destR+"destC IS "+destC+"sourceR is"
      +sourceR+ "sourceC is "+sourceC+"\n"); 

      chessPieces[sourceR][sourceC]= new Dummy();//removes original piece leaves blank aka dummy 


       repaint();
 }

 public void paintComponent (Graphics h) { 

    Graphics2D g = (Graphics2D)h;
    for(int row = 0; row < ROWS; ++row) {

      for(int col = 0; col < COLS; ++col) {

        theBoard[row][col].paint(g); 
        chessPieces[row][col].paint(g); 
      }
    }


 }


  public void mousePressed(MouseEvent event) {

      sourceR=event.getX()/45; // 
      sourceC=event.getY()/45; //here we get the location of the piece to be MOVED


  }

  public void mouseReleased(MouseEvent event) {

     destR=event.getX()/45; //PLACE IT'S MOVED TO
      destC=event.getY()/45; //PLACE IT'S MOVED TO

     move();
  }

  public void mouseEntered(MouseEvent event) {}

  public void mouseExited(MouseEvent event) {}

  public void mouseClicked(MouseEvent event) {}

 }
公共类Chess扩展JComponent实现MouseListener{
公共静态final int行=8,列=8;
私人棋子[]棋子=新棋子[行][列];
私有int sourceR、dest、sourceC、destC;
公开作废动议(){
棋子[desr][destC]=棋子[sourceR][sourceC];
//这不是将工件对象移动到新位置?!
系统输出打印(“dest为”+dest+“destC为”+destC+“sourceR为”
+sourceR+“sourceC是”+sourceC+“\n”);
chessPieces[sourceR][sourceC]=new Dummy();//删除原始棋子,保留空的虚拟棋子
重新油漆();
}
公共组件(图形h){
图形2d g=(图形2d)h;
对于(int行=0;行<行;++行){
for(int col=0;col
首先要做的是在覆盖的paintComponent开始时调用super.paintComponent。我注意到的另一点是,如果
棋盘
棋子
是扩展JComponents的数组,那么不应该直接在它们上面调用paint。调用
repaint()
。您可能根本不需要在Chess中重写paintComponent,因为JComponnent paint方法将绘制子对象。很难说你提供的到底是怎么回事,对不起。