【问题标题】:Drawing string on applet only once在小程序上仅绘制一次字符串
【发布时间】:2019-10-14 12:11:43
【问题描述】:

Java 中的新问题,可能是重复的问题。

使用不带标题栏的全屏小程序在绘制方法的帮助下以每 10 毫秒的时间间隔呈现图像。同时我希望在小程序屏幕上的任何位置显示特定的文本。

由于图像是动态的,因此我在 10 毫秒内渲染,但文本是固定的,不会在小程序的整个生命周期内改变。

现在担心的是,如果我在paint方法中绘制文本,那么它对paint方法的负担每10毫秒绘制一次图像和文本。

public void paint(Graphics  g) 
{   
    if(img != null)
    {
        g.drawImage(img, 0, 0, null);   
        g.drawString("Hey there!", 0, 0); //Additional load
    }           
}   

也不能在标题栏上放置文字。

是否可以一次绘制文本并频繁渲染图像?

【问题讨论】:

  • 但是你不需要在文本上画图吗?你可能需要写更多,然后它会覆盖文本。要解决此问题,请再次绘制它。

标签: java image applet rendering


【解决方案1】:
public void paint(Graphics  g) 
{ 

应该是:

public void paint(Graphics  g) 
{ 
     super.paint(g); // paint the background, borders etc.

因此,如果这样做会删除先前绘制的文本,那么您的问题的答案是 - 否。

顺便说一句 - 查找“过早优化”。

【讨论】:

    【解决方案2】:

    如果您只想绘制一次文本,那么我建议在您的绘制方法之外使用一个布尔变量:

    boolean drawn = true;
    public void paint(Graphics g){
        if(drawn) g.drawString(...);
    }
    

    问题在于,如果您有任何移动的像素或对象,(每帧更改位置)或只是任何应该消失的东西,您将不得不写更多的东西来擦除它。将绘制命令叠加在一起更易于阅读,并且可以更轻松地编辑和创建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多