2016-09-23 88 views
0

我是Java新手,正在研究一個創建同心矩形和橢圓系列的程序。我希望用戶能夠輸入自己的高度和寬度,並且該數字將自動與JPanel(我已經完成)成比例,並保持居中,同時沿着JPanel左對角線。 (我遇到的問題)。創建同心矩形和橢圓的Java程序?

這是到目前爲止我的代碼:

for (int i = 0; i < 5; i++){ 
    int height = 100; 
    int width = 200; 
    int x = (getWidth()-width)/2; 
    int y = (getHeight()-height)/2; 
    graphic.drawRect(x+i*(x/3),y+i*(y/6), width - i * (width/4),height - i * (height/4)); 
    graphic.drawOval(x+i*(x/3),y+i*(y/6), width - i * (width/4),height - i * (height/4)); 
} 

這給了我這個數字:

enter image description here

我去後,我得到它的工作採取用戶輸入的護理至少這個個案。 任何幫助,將不勝感激!

圖片應該如何看待: enter image description here

+0

這給了我成比例的同心形狀,但他們不保持居中。 – Jeni

+0

這個問題目前還不清楚。圓圈應該是同心圓的,還是應該遵循對角線?也許你還應該展示一張照片應該如何看。 –

回答

0

這是因爲你在遞增和改變你的橢圓形的中心/長方形每次增加你的for循環計數器時間。

graphic.drawRect(x+i*(x/3),y+i*(y/6), width - i * (width/4),height - i * (height/4)); 
graphic.drawOval(x+i*(x/3),y+i*(y/6), width - i * (width/4),height - i * (height/4)); 

應該成爲像

graphic.drawRect(width/2, height/2, width - i * (width/4),height - i * (height/4)); 
graphic.drawOval(width/2, height/2, width - i * (width/4),height - i * (height/4)); 

而且第二個問題之前,這些都是行,我沒有注意到,

int x = (getWidth()-width)/2; 
int y = (getHeight()-height)/2; 

的地方,如果我猜什麼的getWidth( )和getHeight()可以正確執行,因此你總是將x和y設置爲0,因爲你的意思是(寬度 - 寬度)/ 2。

+0

我在開始時嘗試過,不是將所有數字都從左上角開始放大,然後變大,我不能發佈更多圖片或鏈接,因此我無法將其展示給您。 – Jeni

+0

我已經編輯了答案,更好地解釋了正在發生的事情以及我認爲您正在嘗試做的事情。基本上有兩件事情正在發生,第一個是繪製方法的前兩個參數是你的形狀的中心點(這就是爲什麼我原來把它設置爲x和y,但我錯過的是你計算這些起點的方式點之前使你的X&Y總是0. – Jayson

+0

感謝您的反饋,getWidth()的路徑是int javax.swing.JComponent.getWidth()這是給我的Jpanel的大小(我相信)我輸出的結果x和y,我實際上得到了42的x和80的y,上面代碼中的數字實際上偏離了我的框,而內部的數字從左上角開始,如果我不夠清晰,我非常感謝你的幫助! – Jeni

0

其實我已經想通了,下面編輯我的getRect和getOval功能:

graphic.drawRect(x+(i*(width/8)),y+(i*(height/8)), width - i * (width/4),height - i * (height/4)); 
graphic.drawOval(x+(i*(width/8)),y+(i*(height/8)),width - i * (width/4),height - i * (height/4)); 

包括寬度和高度的計算x和y使其porpotional寬度和高度分別爲量改變,這樣的數字仍然居中。現在,讓它變得漂亮起來,並嘗試去掉一些計算。