Я пытаюсь создать оконную раму для отображения окна игры. Я расширил JFrame
в своем классе GameWindow
и создал два метода: drawBackground
, который заполняет экран сплошным прямоугольником, и drawGrid
, который рисует последовательные линии, используя цикл for для создания сетки. Вот мой код.
public class GameWindow extends JFrame {
// instance variables, etc.
public GameWindow(int width, Color bgColor) {
super();
// ...
this.setVisible(true);
}
public void drawBackground() {
Graphics g = this.getGraphics();
g.setColor(bgColor);
g.fillRect(0, 0, this.getWidth(), this.getWidth());
// I suspect that the problem is here...
this.update(g);
this.revalidate();
this.repaint();
g.dispose();
}
public void drawGrid() {
Graphics g = this.getGraphics();
g.setColor(Color.BLACK);
for (int i = tileWidth; i < TILE_COUNT * tileWidth; i += tileWidth) {
g.drawLine(0, i * tileWidth, this.getWidth(), i * tileWidth);
g.drawLine(i * tileWidth, 0, i * tileWidth, this.getHeight());
}
// ... and here.
this.update(g);
this.revalidate();
this.repaint();
g.dispose();
}
}
Однако, когда я пытаюсь протестировать этот класс в такой программе:
public class Main {
public static void main(String[] args) {
GameWindow game = new GameWindow(700);
game.drawBackground();
game.drawGrid();
}
}
рамка появляется на экране, но остается пустой; ни фон, ни сетка не прорисовываются. Я пытался Graphics g = this.getGraphics()
до this.getContentPane().getGraphics()
. Я также пытался использовать много разных комбинаций и порядков в drawBackground
и drawGrid
из revalidate
, update
и т. Д. Ни одна из этих попыток не сработала. Как я могу исправить эту проблему?