2017-09-24 102 views
0

我想在一個矩形內建立一個矩形。矩形「牆」應位於高度爲bg.getHeight() - ground.getHeight()的特定位置。出於某種原因,矩形「牆」仍然延伸到小程序的底部。所有其他值,如寬度和位置工作正常。對於一個300高度的applet,如果我減去一個靜態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

另外,你是否直接在applet中繪圖?不要這樣做,而是在小應用程序顯示的JPanel內繪製。另外,爲什麼你甚至使用小程序,因爲這項技術已被Oracle棄用了? –

+0

完整的代碼編輯後。我正在使用一個小程序,因爲它是一個學校作業。 – user1660886

回答

0

答案的核心在評論中已經給出:「你的數學關」。你所做的計算只是錯誤的,沒有意義。

爲什麼我回答這個問題(否則窮人)的問題,主要的原因是,我想:這怎麼可能有人寫這個代碼,並認爲,它甚至可能是遠程來講可以接受的樣式?是的,「風格」在某種程度上可能是主觀的。但對比於問題的代碼時,和下面的代碼,一個人可能很難爭辯這個...

這裏是一個那就說明你很可能試圖達到的結果的一個例子:

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

注意,walls矩形的高度必須是小程序倍0.4的高度,因爲它開始bg.getHeight() * 0.5,這是applet時代0.4的高度,地板具有的高度小程序高度的0.2倍。

+0

好的,謝謝。那讓我開始了。我的目標是隻能調用周圍形狀的屬性而不是小程序。我可能想要在構建它之後以不同的方式打破這一點,並且我想要包含每個部分。 我拿了「h * 0.4」,這當然有用,並且做了「(int)(bg.getHeight()* .5)」,這讓我得到了同樣正確的結果並且以我想要的方式。 至於風格,作爲我編程第一學期的3個章節,我想我只是沒有打磨過。 :) – user1660886

+0

我喜歡把顏色填充部分分開的想法。不知道page.fill() – user1660886