2010-11-18 25 views
3

我正在使用负数来让fillRect()走相反的路。它在我的电脑上运行良好,但我的朋友无法看到它正常工作。我该怎么办?fillRect()中的负数

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

您和您的朋友使用的是什么操作系统?用哪个Java版本? – Riduidel 2010-11-18 08:56:35

+0

我正在使用Windows,我的朋友正在使用Windows。我的朋友们正在使用最新的Java(他必须将它安装在他的电脑上才能看到它)。我正在使用eclipse。它的工作,所以我上传到我的网站,即使我刷新硬盘后,它在铬和Firefox的工作。 – Strawberry 2010-11-18 09:00:14

回答

0

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

显示的是,您应该用不同的方式编写这个applet,让您的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)); 
} 
+0

好吧,所以它是一个条形图,所以我希望它走向消极的方向。 – Strawberry 2010-11-18 09:17:20

+0

有了我发布的解决方案,它会做到这一点。而不是让它向后画一个矩形,你只需要向前画,但是从后面进行绘画,因此会给你带来同样的效果。我错过了另一个问题? – 2010-11-18 09:21:45

+0

你是我的朋友,可以设计这个绿色的复选标记。 – Strawberry 2010-11-18 09:25:48

1

对此有两种流派。

一个是任何具有负面维度的多边形是无意义的,不应该被渲染 - 你是什么意思它是-10像素宽?

另一个是负维度只是将该维的轴上的多边形倒置。

大多数绘画系统都采用后一种逻辑。我在Java绘画方面的经验一直都是这样,尽管我不会经常有负面因素,所以我的经验可能不算太多。

至于你可以做什么:

  1. 你可能需要在你的朋友更新自己的Java版本。
  2. 否则,您必须自行执行反演,方法是检查负向尺寸并调换x,y原点以使尺寸为正值。也就是说,矩形[10,10,-5,5]在空间上等价于[5,10,5,5]。将负向尺寸添加到原点坐标,然后将其设为绝对值。请注意,这可能会导致负面原因,但希望绘图系统不是相当搞砸了。

就个人而言,如果可能的话,我宁愿要求更新的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); 
    } 

而且,请注意,您需要其他绘图操作类似。因为行为是非常令人惊讶的 - 我会将所有事情简化成一个最小的测试程序,带有调试输出并在包装绘图基元的废话之前进行验证。

+0

这实际上是我的目标。我反转它,所以它走向相反的方向。 – Strawberry 2010-11-18 09:07:25

+0

我认为不支持负像素的逻辑是愚蠢的,但这个例子表明并非所有的版本都是相同的遗憾。 – 2010-11-18 09:12:03