2017-05-20 12 views
0

JPanelを引数として受け取る描画メソッドを持つクラスがあります。 drawメソッドの最初の行である:JPanelを長方形を描画するメソッドに渡す

(pはJPanelのはドロー(JPanelのP)メソッドへの引数として渡される)
Graphics g = p.getGraphics(); 

さまざまな色の異なる長方形を(条件文​​に基づいて)描画したいと考えています。だから私は

g.setColor(Color.RED) // or another color 

を使用すると、私は

System.out.println("color is " + g.getColor().toString()); 

を行うと、私は色が変化する参照が、私は長方形が上表示されて表示されていない

g.fillrect(x,y,xsize,ysize). 

を使用して矩形を描画しますJPanel。このJPanelは、JFrameから継承するクラス内のオブジェクトです。私のJPanelで長方形を見るには何が必要ですか?

答えて

1

JPanelからGraphicsオブジェクトを取得してペイントしないでください。 JPanelをサブクラス化してpaintComponentをオーバーライドするには、thisをチェックします。

なぜなら、Graphicインスタンスは、その親(JFrame)がいつそうするのかを決定する可能性があるため、Panelがペイントされるたびに作成され、コントロールされていないからです。したがって、Graphicsインスタンスについては決して想定しないでください。また、paintロジックをpaintComponentメソッドに含める必要があります。

矩形が表示されないのは、古いGraphicsインスタンスでペイントしているか、次のペイントで消去されているためです。 paintComponentメソッド内にある)。

1

JPanelはキャンバスが更新されていることを知らないため、画面に何も表示されません。適切な方法は、JPanelのメソッドをonPaintComponentにオーバーライドし、このメソッドの内部に描画することです。このようにして、JPanel.repaint()を呼び出した後、描画したものが表示されます。

関連する問題