2011-10-21 148 views
0

我已經實現了一個類DrawingPane extends JPanel來繪製一些形狀。我已個別方法中創建用於每個類型的形狀,例如到圈子對應:Java Swing JPanel。我如何繪製形狀?

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

但是我不能夠通過一個參考從另一個類調用此對DrawingPane類。如何才能做到這一點?如果這種方式不可行,那麼如何調用單獨的方法來繪製每種形狀,因爲代碼要求與不同的形狀有所不同?

另外,類JPanel中的scrollRectToVisible方法不適用於對象RoundRectangle2D.Double。如何使這些形狀可見?

+2

執行[演出風俗繪畫(http://download.oracle.com/javase/tutorial/ uiswing /繪畫/)教程。如果你不能從中找出答案,我建議你準備併發布你的最佳嘗試[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

好的,正如你描述的那樣,我仍然需要檢查一下if-else,如果在paintComponent裏面調用哪個方法,因爲我必須在paintComponent中插入整個應用於每個形狀的方法,比如paintCircle, paintRectangles等。我可以調用適當的一個(例如paintCircle)沒有if-else-if如果從類的外部,即從類ScrollPane? – arjacsoh

+0

@arjacsoh:不,我已經更新了我的答案,您可以使用'draw(Shape s)'繪製任何形狀,例如線,矩形,圓或你想要的。 – Jonas

+1

@arjacsoh有或沒有邏輯,你_never_從任何類以外的地方調用paintXX ......這不是Swing繪畫的工作方式,請閱讀教程,Andrew已經提出。 – kleopatra