0

アプレットの背景として画像を設定しようとしています。paint メソッドが呼び出されるたびに、画像が再描画されます。これがちらつきの原因になります。画像を一度だけ描画するにはどうすればよいですか?

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class Main extends Applet  {

    Image background;

    @Override
    public void init() {
        setSize(800, 600);

        try {
            System.out.println(getCodeBase());
            background = ImageIO.read(new File("1.jpg"));
        } catch (IOException ex) {
            System.out.println("Error reading the image");
        }
    }



    @Override
    public void paint(Graphics g) {

        g.drawImage(background, 0, 0, this);


    }
}
4

2 に答える 2

0

これが表示される理由は、ほとんどの最上位コンテナがダブル バッファリングされていないためです (実際、私の記憶が正しければ、AWT コンポーネントはダブル バッファリングされていません)。

これは、paint最上位のコンテナーをオーバーライドすると、この問題が発生することを意味します。

より良い解決策は、 のようなものから拡張するカスタム コンポーネントを作成し、JPanelそのメソッドをオーバーライドして、paintComponentそこに画像をペイントすることです。

また、ペイントのためにコンテキストが正しく準備されていることsuper.paintXxxを確認するために呼び出していることを確認する必要があります。Graphics

このコンポーネントを必要に応じて追加JAppletできJFrameます

于 2013-11-13T20:50:45.590 に答える
0

古いアプレットの代わりに JApplet を使用してみてください。JApplet には、ちらつきを減らすダブル バッファリングが既に備わっているはずです。

于 2013-11-13T20:41:09.140 に答える