JAVA如何更新已绘制的字符串?

JAVA如何更新已绘制的字符串?,java,swing,graphics,Java,Swing,Graphics,我正在尝试重新绘制一个字符串,用于在我正在制作的一个小型java游戏中保持分数,但我不确定如何在屏幕上更改字符串。正如您所看到的,它最初是绘制的,我试图在ingame if语句中更新它 public void paint(Graphics g) { super.paint(g); g.setColor(Color.white); g.fillRect(0, 0, d.width, d.height); //g.fillOv

我正在尝试重新绘制一个字符串,用于在我正在制作的一个小型java游戏中保持分数,但我不确定如何在屏幕上更改字符串。正如您所看到的,它最初是绘制的,我试图在ingame if语句中更新它

public void paint(Graphics g)
    {
        super.paint(g);

        g.setColor(Color.white);
        g.fillRect(0, 0, d.width, d.height);
        //g.fillOval(x,y,r,r);

        //Draw Player
        g.setColor(Color.red);
        g.fillRect(p.x, p.y, 20, 20);
        if(p.moveUp == true) {
            p.y -= p.speed;
        }
        moveObstacles();
        for (int i = 0; i < o.length; i++ ) {
            g.fillRect(o[i].x, o[i].y, 10, 5);
        }

        Font small = new Font("Helvetica", Font.BOLD, 14);
        FontMetrics metr = this.getFontMetrics(small);
        g.setColor(Color.black);
        g.setFont(small);
        g.drawString(message, 10, d.height-60);
        g.drawString(message2, 10, d.height-80);

        if (ingame) {
            for (int i = 0; i < o.length; i++ ) {
                if ((o[i].x < p.x + 20 && o[i].x > p.x) && (o[i].y < p.y + 20 && o[i].y > p.y)) {
                    p.x = BOARD_WIDTH/2;
                    p.y = BOARD_HEIGHT - 60;
                    lives = lives - 1;
                    g.drawString(message, 10, d.height-60); 
                }
            }
            // g.drawImage(img,0,0,200,200 ,null);
        }
        Toolkit.getDefaultToolkit().sync();
        g.dispose();
    }
public void绘制(图形g)
{
超级油漆(g);
g、 setColor(Color.white);
g、 fillRect(0,0,d.宽度,d.高度);
//g、 椭圆形(x,y,r,r);
//平局球员
g、 setColor(Color.red);
g、 fillRect(p.x,p.y,20,20);
如果(p.moveUp==true){
p、 y-=p.速度;
}
移动障碍();
for(int i=0;ip.x)&(o[i].yp.y)){
p、 x=板宽度/2;
p、 y=电路板高度-60;
生命=生命-1;
g、 抽绳(消息,10,d.height-60);
}
}
//g.drawImage(img,0,0200200,空);
}
getDefaultToolkit().sync();
g、 处置();
}

您可以创建一个类似于
setMessage(…)
的方法。使用此方法,然后将“消息”另存为类中的属性

然后,该方法将调用repaint(),这将导致组件重新绘制自身

这就是所有Swing组件的工作方式。考虑一个JLabel和setText(…)方法

此外:

  • 自定义绘制是通过重写paintComponent()方法而不是paint()方法来完成的

  • 不需要工具箱sync()方法

  • 不应丢弃图形对象


  • 工作!在ingame中,将消息字符串再次保存在drawstring的正上方修复了它。