2011-10-21 23 views
0

いくつかの図形を描画するためにクラスDrawingPane extends JPanelを実装しました。 IクラスDrawingPaneを参照して、別のクラスからこれを起動することができませんしかしJava Swing JPanel。シェイプをペイントするには?

public void paintCircles(Graphics g) { 
      super.paint(g); 

:私は、対応する円に、例えば、形状の種類ごとに個別の方法の内側に作成されています。これはどうすればできますか?この方法では不可能な場合は、個々のメソッドを呼び出すことで、コードの要件が異なるシェイプで異なるため、各タイプのシェイプを描画できますか?

さらに、JPanelクラスのscrollRectToVisibleメソッドは、オブジェクトRoundRectangle2D.Doubleには適用されません。これらの図形をどのように見えるようにするには?

+2

は、[実行カスタムペイント](http://download.oracle.com/javase/tutorial/を実行します。 uiswing/painting /)チュートリアル。あなたがそれを理解できない場合は、最善の試みの[SSCCE](http://sscce.org/)を準備し投稿することをお勧めします。 –

答えて

2

GraphicsGraphics2Dにキャストし、public void draw(Shape s)メソッドを使用して、あなたが持っているすべてShapeを渡すことができます。 Shapeの場合はpublic Rectangle getBounds()を使用し、RectangleをscrollRectToVisibleに渡すことができます。

3

あなたのDrawingPanepaintComponent(Graphics g)を実装する必要があり、任意の形状を描画するためにdraw(Shape s)を使用することができます。

public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2 = (Graphics2D)g;  
     g2.draw(yourShape); 
} 
+0

私はpaintComponentのように個々のシェイプに個別に適用するメソッド全体をpaintComponentに挿入する必要があるため、paintComponent内部でif-else-ifを呼び出すメソッドを呼び出す必要があります。 paintRectanglesなど。if-else-ifを使わずに、クラスの外から、つまりクラスScrollPaneから適切なもの(たとえばpaintCircle)を呼び出すことができますか? – arjacsoh

+0

@arjacsoh:いいえ、私は自分の答えを更新しました。あなたは 'draw(Shape s) 'を使って任意の形を描くことができます。線、矩形、円、またはあなたが望むもの。 – Jonas

+1

@arjacsoh、またはロジックなしで、あなたは_never_外部のどのクラスからでもpaintXXを呼び出すことができます。スイングペインティングの仕組みではないので、Andrewが既に提案したチュートリアルを読んでください。 – kleopatra

関連する問題