簡體   English   中英

java Rectangle getHeight()異常行為

[英]java Rectangle getHeight() odd behaviour

我正在嘗試在矩形內構建一個矩形。 矩形“牆”應處於高度為bg.getHeight()-ground.getHeight()的特定位置。 由於某種原因,矩形“牆”仍延伸到小程序的底部。 所有其他值(例如寬度和位置)都可以正常工作。 對於高度為300的小程序,如果我減去一個靜態的120,它可以工作,但是ground.getHeight的值實際上是60,如果我減去60,它仍然一直延伸到邊界。 我對不一致感到困惑。


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

注釋的核心已經給出了答案:“您的數學關閉了”。 您所做的計算只是錯誤的,沒有任何意義。

為什么我回答這個問題(否則窮人)的問題,主要的原因是,我想:這怎么可能有人寫這個代碼,並認為,它甚至可能是遠程接受在風格? 是的,“風格”在某種程度上可能是主觀的。 但是,當比較問題中的代碼和下面的代碼時,可能很難對此進行爭論……

這是一個示例,顯示您可能嘗試實現的結果:

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矩形的高度必須是applet的高度乘以0.4,因為它始於 bg.getHeight() * 0.5 ,它是applet的高度乘以0.4,而地板的高度是0.2倍小程序的高度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM