私は本当にこれを理解することができず、私はあなたの助けが必要です。私は単純な アプレットを作成しました。私はパネルとキャンバスを持っています。私はキャンバスに描く。私はキャンバス をパネルに追加します。アプレットにパネルを追加します。 キャンバスに円を描こうとしていますが、見えません。アプレットのサイズを変更すると、円の後ろに円が表示されます( )。助けてください。キャンバスの円が見えない
import java.applet.*;
import java.awt.*;
public class TestCanvas extends Applet implements Runnable
{
Panel myPanel = new Panel();
int x = 50;
int y = 50;
int width = 100;
int height = 100;
boolean startBall = false;
Graphics bufferGraphics;
Image offscreen;
Thread t;
public void init()
{
canvas.setSize(500,500);
//canvas.setMaximumSize(new Dimension(500,500));
//canvas.setMinimumSize(new Dimension(50,50));
myPanel.add(canvas);
add(myPanel);
//For double buffering
offscreen = createImage(canvas.getWidth(),canvas.getHeight());
bufferGraphics = offscreen.getGraphics();
}
public void start()
{
t = new Thread();
t.start();
startBall = true;
}
public void stop()
{
t = null;
}
public void destroy()
{
t = null;
}
public void run()
{
for (; ;)
{
try
{
canvas.repaint();
Thread.sleep(100);
}catch(InterruptedException e){}
}
}
class myCanvas extends Canvas
{
private static final long serialVersionUID = 1L;
public myCanvas()
{
setBackground(Color.yellow);
setSize(500, 300);
//setBounds(0, 0, 500, 300);
}
}
myCanvas canvas = new myCanvas();
public void paint(Graphics g)
{
g = canvas.getGraphics();
bufferGraphics.clearRect(0,0,canvas.getWidth(), canvas.getHeight());
bufferGraphics.setColor(Color.black);
//x++;
//y++;
bufferGraphics.setColor(Color.black);
bufferGraphics.fillOval(x, y, width, height);
g.drawImage(offscreen,0,0,null);
}
public void update(Graphics g)
{
canvas.paint(g);
}
}
オブジェクトと機能の束を定義しました。あなたはどのようにこれらのアイテムに電話していますか? – zipzit
アプレットが起動すると、自動的にスレッドが実行されます。ペイント法は、キャンバス上にボールをペイントします。しかし、ボールは背面に表示されます。私はそれがコンポーネントのグラフィックスを呼び出してコンポーネントを一時的にすることと関係があると思いますが、まだ理解できません。 –
始めましょう。アプレットは死んだ技術で、ブラウザを積極的にブロックしたり、Javaプラグインを中止したりすることはほとんどありません。 awtは基本的に16年前のスイングに取って代わられていたので、BufferStrategyを使うつもりがなければ、本当にawtベースのコンポーネントを使う必要はなく、スイングコンポーネントもデフォルトでダブルバッファされています。さて、すべてのことを言っていると、ダブルバッファリングの試みは一般的に間違っています。BufferedImageを使用する必要があります。あなたの 'キャンバス'は実際に画面に表示されませんが、それはペイントしようとしているものです。 – MadProgrammer