drawString()不是在我的游戏中绘制字符串

时间:2015-05-19 02:27:51

标签: java swing graphics

我正在使用userAgent在字符串上写文字,但没有显示任何内容。我将颜色设置为白色并将坐标设置为(100,100)。还有什么我做错了吗?

drawString()

2 个答案:

答案 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);
}
  1. 不要覆盖油漆,覆盖paintComponent,你已经绕过了绘画过程,这意味着你可能会遇到各种令人讨厌的故障
  2. 致电super.paintComponent
  3. 请查看Painting in AWT and SwingPerforming 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);

您需要先绘制背景颜色。然后你可以在它上面绘制字符串。