2017-09-24 6 views
0

私は長方形内に長方形を構築しようとしています。長方形の「壁」は、高さがbg.getHeight() - ground.getHeight()の特定の位置にある必要があります。なんらかの理由で、長方形の「壁」は依然としてアプレットの底に伸びています。幅や位置などの他の値はすべて正常に動作しています。 300の高さのアプレットで、静的な120を引くと、それは動作しますが、ground.getHeightの値は実際に60で、60を引くと、それはまだ境界線まで伸びています。私は矛盾と混同しています。java Rectangle getHeight()奇妙な動作


import javax.swing.JApplet; 
import java.awt.*; 

public class House_JM extends JApplet { 

    public void paint(Graphics page) { 
     Rectangle ground = new Rectangle(0, (int) (getSize().height * .8), getSize().width, 
       (int) (getSize().height * .2)); 
     Rectangle bg = new Rectangle(0, 0, getSize().width, (int) (getSize().height * .8)); 
     page.setColor(Color.green); 
     page.fillRect((int) ground.getX(), (int) ground.getY(), (int) ground.getWidth(), (int) ground.getHeight()); 
     page.setColor(Color.blue); 
     page.fillRect((int) bg.getX(), (int) bg.getY(), (int) bg.getWidth(), (int) bg.getHeight()); 
     Rectangle walls = new Rectangle((int) (bg.getWidth()/2 - bg.getWidth() * .1), (int) (bg.getHeight() * .5), 
       (int) (bg.getWidth() * .4), (int) ((bg.getHeight() - ground.getHeight()))); 
     page.setColor(Color.red); 
     page.fillRect((int) walls.getX(), (int) walls.getY(), (int) walls.getWidth(), (int) walls.getHeight()); 
     System.out.println(bg.getHeight()); 
    } 
} 
+1

有効な[mcve]、***小さな***プログラムを作成し、投稿してください。私たちは、コピー、貼り付け、コンパイル、実行が可能で、あなたの問題を示すコードを持っています。プログラム全体を尋ねるのではなく、十分にテストできるだけです。 –

+0

また、アプレット内で直接描画していますか?これをしないで、代わりにアプレットによって表示されるJPanel内に描画します。また、この技術がオラクルによって推奨されなくなったため、なぜあなたはアプレットを使用していますか? –

+0

完全なコードの投稿を編集しました。私はそれが学校の割り当てであるため、アプレットを使用しています。 – user1660886

答えて

0

答えのコアは、すでにコメントで与えられた:「あなたの数学がオフになっています」。あなたがした計算は間違っていて意味がありませんでした。

私はこの(そうでない貧困層)の質問に答えてる理由の主な理由は、私は疑問に思っていることである:それはどのように、誰かがこのコードを書き込み、それもの面でリモートで受け入れられるかもしれないと思うことがありますスタイル?はい、「スタイル」はある程度は主観的なものかもしれません。

:問題のコード、および以下のコードを比較する場合でも、1本について議論ハード時間を持つことができます...ここで

あなたはおそらく達成しようとしている結果を示している例でありますそれはアプレット0.4倍の高さである、bg.getHeight() * 0.5を開始し、床の高さを有するためwalls矩形の高さは、アプレット0.4倍の高さでなければならないこと

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.geom.Rectangle2D; 

import javax.swing.JApplet; 

public class House_JM extends JApplet { 

    @Override 
    public void paint(Graphics g) { 
     Graphics2D page = (Graphics2D)g; 

     int w = getWidth(); 
     int h = getHeight(); 

     Rectangle2D ground = new Rectangle2D.Double(
      0, h * 0.8, w, h * 0.2); 

     Rectangle2D bg = new Rectangle2D.Double(
      0, 0, w, h * 0.8); 

     Rectangle2D walls = new Rectangle2D.Double(
      bg.getWidth() * 0.5 - bg.getWidth() * 0.1, 
      bg.getHeight() * 0.5, 
      bg.getWidth() * 0.4, 
      h * 0.4); 

     page.setColor(Color.green); 
     page.fill(ground); 
     page.setColor(Color.blue); 
     page.fill(bg); 
     page.setColor(Color.red); 
     page.fill(walls); 

     System.out.println(bg.getHeight()); 
    } 
} 

注アプレットの高さの0.2倍。

+0

ありがとう、ありがとう。それが私を始めました。私の目標は、アプレットの代わりに周囲の図形の属性だけを呼び出すことでした。私はそれが構築された後、これを別に分割したいと思うかもしれません。 私は「h * 0.4」を取りました。これはもちろん動作し、「(int)(bg.getHeight()* .5)」を実行しました。 プログラミングについての私の最初の学期には3つの章がありますが、私はそれが磨かれていないと思います。 :) – user1660886

+0

私は、色の塗りつぶしセクションを別々に置くのが好きです。 page.fill()について知りませんでした – user1660886