java Rectangle getHeight()奇怪的行为

时间:2017-09-24 14:26:27

标签: java swing graphics

我正在尝试在矩形内构建一个矩形。矩形"墙壁"应该在一个特定的位置,其高度为bg.getHeight() - ground.getHeight()。由于某种原因,矩形"墙壁"仍然延伸到applet的底部。所有其他值,如宽度和位置都正常工作。使用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());
    }
}

1 个答案:

答案 0 :(得分: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矩形的高度必须是applet的高度乘以0.4,因为bg.getHeight() * 0.5开始,这是applet的高度时间0.4,地板的高度是小程序高度的0.2倍。