我正在用Java开发小型游戏,需要显示图片。此图像位于磁盘上的sprite文件夹中。基本上,我有这个结构:

public class mainClass extends JFrame {
   private int imageType; // The type of the image
   public mainClass() {
       windowContent = new WindowContent(gameBoard, nextPiece);
       this.setContentPane(windowContent);
       while(!gameOver) {
           this.imageType = otherClass.getImageType(); // Short version
           this.repaint();
       }
   }

   class WindowContent extends JPanel {
       private int imageType;
       public WindowContent(int imgType) {
          this.imageType = imgType;
       }
       public void paintComponent(Graphics g) {
           try {
               BufferedImage img = ImageIO.read("srprites/" + this.imageType + ".png");
               g.drawImage(img, 200,200, null);
           } catch .......
       }
   }
}


问题是第一张图像正常显示,但是当可变内容更改时,什么也没发生。第一张图片保持不变。我尝试了很多操作,例如移动this.setContentPane(),但没有任何效果。有没有办法使它正常工作?
谢谢。

最佳答案

WindowContent中的imageType仅在构造函数中分配。通过在主类中更改imageType的值,您将不会在WindowContent中更改imageType。您需要直接在WindowContent上设置imageType

代替

  while(!gameOver) {
       this.imageType = otherClass.getImageType(); // Short version
       this.repaint();
  }


你需要做

  while(!gameOver) {
       windowContent.setImageType(otherClass.getImageType()); // Short version
       this.repaint();
  }


当然,将设置器添加到windowContent

08-18 16:06