画像(BufferedImage)にテキストを書きたいと思いますが、テキストが更新されると、新しいテキストが古い画像に書き込まれます。すべての数字が同じ場所に書かれている、誰かが助けることができます。 私はこのコードusinsだ:Java、画像のテキスト、更新
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();
}
}
FYI:EDT(Event Dispatching Thread)でThread.sleepを使用せず、paintComponentでrepaint()を呼び出しないでください。 –
1)より良いヘルプをもっと早く得るために、[SSCCE](http://sscce.org/)を投稿してください。 ( 'main()'が必要です)*無視 - 私の悪い* 2)画像は、JREの画像を使用するか、コードで生成します。 3)@GuillaumePoletに同意する4)組み込みアプリケーションリソース(WAG)に 'File'を使用しないで' URL'を使用します。 5)画像上にテキストを直接描画する理由はありません。イメージをコンポーネント 'Graphics'インスタンスに描画し、文字列を同じ' Graphics'に描画するだけです。 6)ソース内の空白に必要な空行は1つだけです.3を使用しないでください! 7)フレームは、他の方法ではなく、コンポーネントのサイズに適合する必要があります。 –
@AndrewThompson実際にはメイン(問題は画像はファイルだが、以前はそれを走らせた)。 –