2014-03-04 106 views
1

所以我想讓我的程序通過遞歸繪製圓圈。每次步入遞歸時間的圓的半徑應10.這是增加它應該是什麼樣子:enter image description here爪哇:遞歸繪圖圈

但是當我運行這段代碼繪製面板上:

class CirclePanel extends JPanel{ 
public int radius = 25; 
int xPossition = 250; 
int yPossition = 250; 
    @Override 
public void paintComponent(Graphics g){ 
    super.paintComponents(g); 

    g.setColor(Color.BLUE); 
    g.drawOval(250, 250, radius, radius); 
    radius += 10; 

    if (radius + 10 < 250){ 
    paintComponent(g); 
    } 
    } 


} 

我得到這樣的:

enter image description here

爲何圈變化的中心點,如果我把它設置爲一個常數250?

+3

其實,我覺得你的車一個看起來更有趣... – Sinkingpoint

+0

第二個看起來好多了 – alex

回答

2

drawOval接受左上角的位置和寬度和高度,而不是中心位置和寬度和高度。

應該是這樣的:

public void paintComponent(Graphics g) { 
    super.paintComponents(g); 

    g.setColor(Color.BLUE); 
    g.drawOval(250 - radius, 250 - radius, radius * 2, radius * 2); 
    radius += 10; 

    if (radius + 10 < 250) { 
     paintComponent(g); 
    } 
} 
+0

謝謝,就是這樣,只需要將半徑除以2即可 – nfoggia

+0

在這種情況下,您的半徑實際上是直徑 –

1

橢圓的中心與您在first two parameters中提供的橢圓的起始左上角相對。慢慢地改變這些向上和向左上的框架,讓它像你想要的那樣展開,所以如果你將圓圈展開10個像素,減去左上角的x和y 5個像素。

+0

Docs說「x - 要填充的橢圓左上角的x座標 y - 要填充的橢圓的左上角的y座標 寬度 - 橢圓的寬度b e填充。 高度 - 橢圓的高度要填充「 – NESPowerGlove

3

因爲在documentation

x作爲指定的 - 的x 左上角角的橢圓形的座標來繪製。

y - 的左上角的y座標要繪製的橢圓的角落。

寬度 - 要繪製的橢圓的寬度。

高度 - 要繪製的橢圓的高度。

您的代碼將工作,如果X和Y是圓的中心的座標

你應該調整你的代碼,如:

class CirclePanel extends JPanel{ 
    public int radius = 25; 
    int xPossition = 250; 
    int yPossition = 250; 

    @Override 
    public void paintComponent(Graphics g){ 
     super.paintComponents(g); 
     g.setColor(Color.BLUE); 
     g.drawOval(250-(radius/2), 250-(radius/2), radius, radius); 
     radius += 10; 

     if (radius + 10 < 250){ 
     paintComponent(g); 
     } 
    } 
} 
+0

只是一件小事, 'radius/2'周圍不需要括號;) – janos