代替は非常に単純です:
代わりの直接JPanel
に塗装、BufferedImage
にペイントしJPanel
内でその画像をレンダリングします。
public class DrawingCanvas
extends JPanel
{
private BufferedImage bi = new BufferedImage(someWidth, someHeight, arbitraryType);
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(bi, 0, 0, getWidth(), getHeight(), Color.white, this);
}
public Graphics getPaintingGraphics()
{
return bi.getGraphics();
}
}
これは単なるスケッチですが、基本的な考え方を示しています。
DrawingCanvas canvas = new DrawingCanvas();
Graphics g = canvas.getPaintingGraphics();
g.setColor(Color.blue);
g.fillRect(30, 30, 50, 50);
g.dispose();
青い四角形を表示すると、パネルにペイントできます。あなたが直接、この目的のためにJPanel
を使用してはならないのはなぜ
:
JPanel
取得の完全にクリアし、それを再描画だ最初から描きました。この振る舞いを変更すると、標準的なSwing-APIの動作に深刻な影響を及ぼしますので、絶対に避けてください。さらに、上記の方法ではキャンバスが表示される前にペイントすることができますが、
JPanel
では機能しません。