gpt4 book ai didi

java - PaintComponent 不绘制图 block 或绘制字符串

转载 作者:行者123 更新时间:2023-12-01 10:05:56 27 4
gpt4 key购买 nike

我为我的学校项目编写了一些代码,使用二维数组和函数 PaintComponent 创建 10 x 10 的网格。

我的问题是它不显示网格或显示字符串。 (编译器不会显示任何错误。)

这是我的代码:

Board.java

public class Board extends JComponent implements KeyListener{

public Board() {

}

public static String[] gameElements = new String[100];


private String[][] map = new String[10][10];
private String currentLevel = "1";
private boolean paintComponentExecuted = false;
Player hero;


@Override
public void paintComponent(Graphics g) {
if(paintComponentExecuted == false) {
loadLevel();
int i = 0;
int positionX = 50;
int positionY = 50;
for (int y = 0; y < map.length; y++) {
for (int x = 0; x < map.length; x++) {
new Tile(x, y).paintComponent(g);
g.drawString(gameElements[i], positionY, positionX);
map[y][x] = gameElements[i];
positionY += 50;
System.out.print("[" + map[y][x] + "]");
i++;
}
positionY = 50;
positionX += 50;
System.out.println();
paintComponentExecuted = true;

}
}
}

public void readTextFile(String fileName) {
try {
FileReader fileReader = new FileReader(fileName + ".txt");
BufferedReader buffer = new BufferedReader(fileReader);
String splitBy = ",";
String line = buffer.readLine();

for (int i = 0; i < gameElements.length; i++) {
gameElements = line.split(splitBy);
}

} catch (FileNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}

public void loadLevel() {
readTextFile(currentLevel);
}

public static void main(String[] args) {

JFrame frame = new JFrame();
frame.setSize(600, 600);
frame.setTitle("SleutelBarricade");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JComponent chart = new Board();
frame.add(chart);

frame.setVisible(true);


}

@Override
public void keyTyped(KeyEvent e) {

}

@Override
public void keyPressed(KeyEvent e) {

}

@Override
public void keyReleased(KeyEvent e) {

}
}

瓷砖.java

public class Tile extends Board {

public Tile() {

}

final private static int CELL_WIDTH = 50;
final private static int CELL_HEIGHT = 50;

final private static int BOARD_X_OFFSET = 25;
final private static int BOARD_Y_OFFSET = 25;

private int x;
private int y;

private int getScreenX(int x, int y) {
return BOARD_X_OFFSET + x * CELL_WIDTH;
}

private int getScreenY(int x, int y) {
return BOARD_Y_OFFSET + y * CELL_HEIGHT;
}

public Tile(int x, int y) {
this.x = x;
this.y = y;
}

@Override
public void paintComponent(Graphics g) {
g.setColor(Color.BLACK);
g.drawRect(
getScreenX(x, y),
getScreenY(x, y),
CELL_WIDTH,
CELL_HEIGHT);

}

}

提前致谢!

最佳答案

您必须删除此条件:

if(paintComponentExecuted == false) {


paintComponentExecuted = true;
}

将该 block 的其余内容保留在那里。不要堵塞油漆重新油漆;否则你只会看到一次,再也不会出现。

您需要在构造函数中创建图 block :

假设你有这个全局变量

Tile tiles=new Tile[10][10];

然后在构造函数中

   for (int y = 0; y < tiles[0].length; y++)
for (int x = 0; x < tiles.length; x++)
tiles[x][y]=new Tile(x, y);

然后在你调用的paintComponent中

tiles[x][y].paintComponent(g);

此外,Tile 最好不要扩展任何东西,因为您是在板上绘图。也许其中一些会有所帮助。

关于java - PaintComponent 不绘制图 block 或绘制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36478456/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com