0

画像 (BufferedImage) にテキストを書きたいのですが、テキストが更新されると、古いテキストの上に新しいテキストが書き込まれます。たとえば、すべての数字が同じ場所に書き込まれます。誰か助けてください。私はこのコードを使用しています:

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;

public class Prove extends JPanel {
    int size =  800;
    private BufferedImage sc ;
    JLabel label ;
    private int counter =0 ;

    public Prove()
    {       
        JFrame frame = new JFrame();
        frame.getContentPane().add(this);
        frame.setSize(2*size, size);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        try{ sc = ImageIO.read(new File("Images/ser.jpg"));     
            label =new JLabel(new ImageIcon(sc));
            this.add(label);
        }catch(IOException e){}


    }

    public void paintComponent(Graphics g)
    {
        g.setColor(Color.GRAY);
        g.fillRect(0,0, getWidth(),getHeight());        //prapavijen 

        Graphics2D g2 = (Graphics2D)g;

        paintScore(g2);
    }

    public void paintScore(Graphics g2)
    {

        if(sc != null)
        {
            Graphics gi = sc.createGraphics();
            gi.setFont(new Font("Times New Roman", Font.BOLD, 20));
            String r = counter+"";
            gi.drawString(r, 20, 20);
            counter ++;
            this.repaint();
            try{Thread.sleep(500);}
            catch(InterruptedException e){}
            System.out.println(counter);
        }   

    }

    public static void main(String[] args)
    {
        new Prove();

    }



}
4

3 に答える 3

1

元のイメージの変更されていないコピーを保持する必要があります。この疑似コードを試してください:

BufferedImage img1 = loadImage();

そしてあなたのペイントコードで:

BufferedImage img2 = createEmptyImage( img1 ); // same size, mode and depth
Graphics g = img2.getGraphics();
try {
    g.draw( img1 ); // background
    g.drawString(); // render text on top of it
} finally {
    g.dispose();
}
于 2012-04-30T12:43:43.343 に答える
1

画像に直接テキストを描画する理由はありません。コンポーネントGraphicsインスタンスに画像を描画してから、同じ に文字列を描画するだけGraphicsです。

于 2012-05-02T17:45:13.463 に答える
1

テキストを同じ位置に描画しています。上書きする必要があります

gi.drawString(r, 20, 20);

新しいテキストを古いテキストの下に表示する場合は、垂直座標を変更する必要があります

于 2012-04-30T11:54:43.023 に答える