我正在使用userAgent
在字符串上写文字,但没有显示任何内容。我将颜色设置为白色并将坐标设置为(100,100)。还有什么我做错了吗?
drawString()
答案 0 :(得分:2)
你做事的顺序非常重要,请记住,在Swing中绘画就像在纸上画画,如果你先画出文字,然后在上面画画,它将不再可见......
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(new Color(20, 50, 0));
g.fillRect(0, 0, WIDTH, HEIGHT);
g.setColor(Color.BLACK);
for (int i = 0; i < WIDTH / 20; i++) {
g.drawLine(i * 20, 0, i * 20, HEIGHT);
}
for (int i = 0; i < HEIGHT / 20; i++) {
g.drawLine(0, i * 20, WIDTH, i * 20);
}
for (int i = 0; i < snake.size(); i++) {
snake.get(i).draw(g);
}
for (int i = 0; i < apples.size(); i++) {
apples.get(i).draw(g);
}
g.setColor(Color.WHITE);
g.drawString("Score: " + score, 100, 100);
}
paintComponent
,你已经绕过了绘画过程,这意味着你可能会遇到各种令人讨厌的故障super.paintComponent
请查看Painting in AWT and Swing和Performing Custom Painting,详细了解如何完成绘画。
Swing也不是线程安全的,你需要在更改绘制过程用于更新UI的任何内容时小心,因为绘画可能随时出于任何原因而发生。
考虑使用Swing Timer
代替Thread
。计时器在事件调度线程的上下文中执行它的滴答事件,从而更安全地从内部更新UI。见Creating a GUI With JFC/Swing
答案 1 :(得分:0)
你有一些错误的顺序。在绘画时,您需要以正确的顺序绘画,否则您将在其他对象的顶部绘画。
因此,在您的代码中,paint()
方法的前5行应如下所示...(请注意相同的代码,但顺序不同)
g.clearRect(0, 0, WIDTH, HEIGHT);
g.setColor(new Color(20, 50, 0));
g.fillRect(0, 0, WIDTH, HEIGHT);
g.setColor(Color.WHITE);
g.drawString("Score: " + score, 100, 100);
您需要先绘制背景颜色。然后你可以在它上面绘制字符串。