(Java)绘制的矩形不会出现



我正在做一个学校项目,我想画一个用矩形做成的游戏板,这些矩形保存在一个数组中。我设法做到了,但只有最后绘制的矩形保留在面板上。我真的很绝望,我不知道我的错误在哪里。

该场地为4x5场地。瓷砖类中保存的坐标:

前两个表示左上角

最后两个表示的右下角

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class quoVadis{
    public static void main(String[] args) {
        new Frame();
    }
} 
class Tile {
    Random rGen = new Random();
    int sX,sY,eX,eY;
    Color farbe;
    public Tile(int sX, int sY,int eX,int eY){
        this.sX = sX;
        this.sY = sY;
        this.eX = eX;
        this.eY = eY;
        farbe = new Color(rGen.nextInt(156)+100,rGen.nextInt(156)+100,rGen.nextInt(156)+100);
    }
}
class Frame extends JFrame{
    private Game game;
        final int GAMESIZE = 400;
        final int PANELSIZE = GAMESIZE/5;
    public Frame() { 
        super("Quo Vadis");     
        this.setSize(GAMESIZE, GAMESIZE*5/4);
        this.setLocation(50, 50);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        game = new Game(GAMESIZE, PANELSIZE);
        game.setLayout(null);
        game.setBackground(Color.WHITE);
        this.getContentPane().add(game);

        this.setVisible(true);
   }
    }
class Game extends JPanel{
    int GAMESIZE;
    int PANELSIZE;
    private Tile field[][]=new Tile[4][5]; 
    Random rGen = new Random(4711);
    Tile stein;
    public Game(int g, int p) {
        GAMESIZE = g;
        PANELSIZE = p;

//错误必须在以下部分:

        int idx=0;  
        for(Tile i:levels){
            for(int j = i.sX; j <= i.eX; j++){
                for(int k = i.sY; k <= i.eY; k++){
                    field[j][k] = levels[idx];
                }
            }
            idx++;
         }
            for(int k = 0; k <= 4; k++){
                for(int j = 0; j <= 3; j++){
                    if(field[j][k]==null)continue;
                    stein=field[j][k];
                    draw((field[j][k].sX * PANELSIZE) , (field[j][k].sY * PANELSIZE) , ((((field[j][k].eX-field[j][k].sX) + 1) * PANELSIZE) -1),  ((((field[j][k].eY-field[j][k].sY)+ 1) * PANELSIZE) -1));
                }
            }
        this.setVisible(true);
    }
    int rx, ry,rdx,rdy;
    private void draw(int a, int b, int c, int d){
        rx=a;
        ry=b;
        rdx=c;
        rdy=d;
        repaint(rx,ry,rdx,rdy);
    }
    public void paintComponent(Graphics g) {
      super.paintComponent(g);
      g.setColor(stein.farbe);
      g.fillRect(rx, ry, rdx, rdy);
   }
    Tile[] levels = {
        new Tile(1,0,2,1),
        new Tile(0,0,0,1),
        new Tile(3,0,3,1),
        new Tile(0,2,0,3),
        new Tile(1,2,2,2),
        new Tile(3,2,3,3),
        new Tile(0,4,0,4),
        new Tile(1,3,1,3),
        new Tile(2,3,2,3),
        new Tile(3,4,3,4),
        };
}

我已经用数字检查了矩形的位置,它们在各个方面都是正确的,所以它们不会重叠或类似的东西。

抱歉我的英语不好,这不是我的主要语言。

每次都需要在paintComponent方法内部绘制每个矩形。

目前,您正在为一个矩形调用绘制方法,然后调用重新绘制并绘制该矩形。paintComponent每次调用时都会重新绘制整个面板。这意味着它将保留最后一个矩形(其余的都被"重新绘制"了)

您想循环浏览所有的平铺,并使用drawRect方法在paintComponent方法中绘制它们,这样每次都会绘制它们。

public void paintComponent(Graphics g) {
  super.paintComponent(g)
      for(int k = 0; k <= 4; k++){
            for(int j = 0; j <= 3; j++){
                if(field[j][k]==null)continue;
                stein=field[j][k];
                 g.setColor(stein.farbe);
                g.fillRect((field[j][k].sX * PANELSIZE) , (field[j][k].sY * PANELSIZE) , ((((field[j][k].eX-field[j][k].sX) + 1) * PANELSIZE) -1),  ((((field[j][k].eY-field[j][k].sY)+ 1) * PANELSIZE) -1));
            }
        }
}

相关内容

  • 没有找到相关文章

最新更新