gpt4 book ai didi

java - 调用 setBackground() 和 setBorder() 时 JLabel 不会改变

转载 作者:行者123 更新时间:2023-11-30 03:27:39 25 4
gpt4 key购买 nike

我一直在为我的一门课开发蛇程序。除了一个小问题外,它运行完美:在 View 中(扩展 JLabel )我将背景设置为 Color.WHITE , opaquetrueColor.GREEN 的边界在构造函数中。这些行似乎都不影响 GUI。

这是代码:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.BorderFactory;
import javax.swing.JLabel;

public class View extends JLabel {
private Snake snake;
private Fruit fruit;
private Game game;

public View(int size, Game g) {
int W = Game.SIZE * Snake.SIZE;
int H = Game.SIZE * Snake.SIZE;
this.setOpaque(true);
this.setBounds((Game.WIDTH-W)/2, (Game.HEIGHT-H)/2, W, H);
this.setBackground(Color.WHITE);
this.setBorder(BorderFactory.createLineBorder(Color.GREEN));
snake = new Snake(Snake.SIZE, Snake.SIZE);
fruit = new Fruit();
game = g;

}

public void start() {
boolean flag = true;
snake.start();

while(flag) {
snake.move();
repaint();
try {
Thread.sleep(100);
}catch(Exception e) {
e.printStackTrace();
}
}
}

public void move(int dir) {
snake.move(dir);
}

public void doDrawing(Graphics2D g) {
int s = snake.SIZE;
int fx = fruit.getX();
int fy = fruit.getY();
g.setColor(Game.SNAKE_COLOR);
Snake sn = snake;
boolean flag = true;
while(flag) {
g.fillRect(sn.getX(), sn.getY(), s, s);
if(sn.hasTail()) {
sn = sn.getTail();
}
else flag = false;
}

g.setColor(Game.FRUIT_COLOR);
g.fillRect(fx, fy, s, s);

if(snake.getX() == fx && snake.getY() == fy) {
snake.ate();
fruit.create();
}
}

public void paint(Graphics g) {
game.repaint();
Graphics2D d = (Graphics2D) g;
doDrawing(d);
}
}

最佳答案

您正在重写 paint 方法,但从未调用 super.paint() 让父类执行其绘制操作。 More information available here.

其他一些改进建议:

  1. 您应该重写 paintComponent(),而不是使用 paint(),并在该方法的第一行之一中调用父级绘画例程super.paintComponent(g).

  2. 您可能会考虑扩展 JPanelJComponent 而不是 JLabel,因为您似乎没有使用此类的任何功能。

  3. 不要在绘画方法中调用 repaint

关于java - 调用 setBackground() 和 setBorder() 时 JLabel 不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29802577/

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