fillRect()中的负数

时间:2010-11-18 08:53:38

标签: java applet

我使用负数让fillRect()采取相反的方式。它在我的电脑上运行良好,但我的朋友看不到它正常工作。我该怎么办?

page.fillRect (12, 12, -5, 10);

2 个答案:

答案 0 :(得分:1)

这有两种思想流派。

一个是任何具有负尺寸的多边形都是荒谬的,不应该被渲染 - 你的意思是它是-10像素宽?

另一个是负维度只是反转该维度轴上的多边形。

大多数绘画系统都适用后一种逻辑。我在使用Java绘画方面的经验一直都是这样的,虽然我不会经常有负面的维度,所以我的经验可能不算太多。

关于你能做什么:

  1. 您可能需要让您的朋友更新他的Java版本。
  2. 否则,您必须自行执行反演,方法是检查负尺寸并转置x,y原点以使尺寸为正。也就是说,矩形[10,10,-5,5]在空间上等同于[5,10,5,5]。负维度被添加到原点坐标,然后变为绝对。请注意,这可能导致负面原点,但希望绘图系统不是完全搞砸了。
  3. 就个人而言,如果可能的话,我更愿意要求更新的JVM。

    否则我推荐的代码是:

    public void fillRect(Graphics gc, int x, int y, int width, int height) {
        if(width <0) { x+=width;  width =-width;  }
        if(height<0) { x+=height; height=-height; }
        gc.fillRect(x,y,width,height);
        }
    

    另外,请注意,您需要与其他绘图操作类似。

    最后,我会怀疑所有这些中的另一个错误,因为这种行为非常令人惊讶 - 我会将所有内容简化为最小的测试程序,使用调试输出并验证,然后再包装绘制原语的垃圾。

答案 1 :(得分:0)

我的猜测是你和你的朋友正在使用2个不同版本的Java。你的支持用负值填充,而你的支持则没有。 (甚至是sdk vs jre)。

显示的是,你应该用不同的方式编写这个,让你的applet在所有版本上运行。

为什么不简单地将你的x移动-5?

如果你想以更整洁的方式做到这一点

public void myfillRect(graphics page, int x, int y, int width, int height){
    if(width <0)
        x-=Math.abs(width);
    if(height <0)
        y-=Math.abs(height);

    page.rectfill(x,y,Math.abs(width), Math.abs(height));
}