2016-12-21 8 views
-1

の外に、私は次の操作を実行しようとしていますオブジェクト。クールなものを描くために使用できるAPIのようなものでなければなりません。私は私のクラスでGraphicsオブジェクトを持ってみましたJPanelのは、paintComponentメソッド

は、そのメソッドの Graphicsオブジェクトと等しい、と私は私の方法はpaintComponent方法で呼び出されることなく、JPanelにレンダリングするために、このオブジェクトを使用していました。

答えて

0

代替は非常に単純です:

代わりの直接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では機能しません。

関連する問題