2016-09-23 11 views
0

私はJavaを初めて使い、同心円の長方形と楕円形の一連のプログラムを作成しています。私は、ユーザーが自分の高さと幅を入力できるようにしたい、JPanelの左の対角線に沿った線をたどっている間、Figureは自動的にJPanelに比例し、中央にとどまります。 (私が持っている問題)。私はそれがために働いて取得した後、ユーザー入力の世話をするつもりです同心円の長方形と楕円を作成するJavaプログラム?

enter image description here

:私は、この数字を与える

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

+0

これは私に比例した同心円形状を与えますが、中央には残りません。 – Jeni

+0

この質問は不明です。円は同心円か、対角線をたどるべきですか?たぶん、あなたはまた、それがどのように見えるかを示すべきである。 –

答えて

0

あなたはループカウンタのためにあなたをインクリメントするたびにインクリメントして、楕円/矩形の中心を変更しているためです。

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()が正しく動作するかどうかは、(幅 - 幅)/ 2のようなものなので、常にxとyを0に設定します。

+0

私は始めに、私の人物のすべてが左上隅から始まり、次に大きくなると、それ以上の写真やリンクを投稿できないので、私はそれをあなたに示すことはできません。 – Jeni

+0

私はあなたがやろうとしていることと一緒に起こっていることのより良い説明で答えを編集しました。基本的に2つのことが起こっていました。最初の2つの方法は、ドローメソッドの最初の2つのパラメータは、あなたのシェイプの中心点です(元々x&yに設定されていましたが、あなたのxとyは常に0になります。 – Jayson

+0

フィードバックのおかげで、getWidth()のパスはint型です。javax.swing.JComponent.getWidth()私にJpanelのサイズを与えています。 xとyと私は実際にxのための42とyのための80を得ています。上のコードからの図は実際にオフセンターの左上隅から開始内のボックスと数字。私は本当にあなたの助けに感謝します! – Jeni

0

私は実際には以下の私のgetRectとgetOval機能の編集、それを考え出した:xとyの計算では、幅と高さを含む

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)); 

は幅と高さがあっ量にそれがporpotional作ら図が中央に残るように変更しました。さあ、それをかわいそうにして、いくつかの計算を切り抜こうとしましょう。