Java GradientPaint工作异常

Java GradientPaint工作异常,java,swing,drawing,gradient,Java,Swing,Drawing,Gradient,在使用Java的绘图工具时,我遇到了Java.awt.GradientPaint类,它允许在绘制形状时使用渐变着色。我决定玩玩它,在一个JPanel上画满了红色到绿色渐变的矩形,然后立刻注意到了一些奇怪的东西 当我开始画一个矩形时,它是一个纯红色,当我将它的高度或宽度增加到某个值后,就会出现渐变。在某些情况下,在梯度出现之前,矩形的高度或宽度必须较大(即200px)。然后我注意到,我开始绘制矩形时,越靠近JPanel的右侧或底部,在应用渐变之前,矩形的大小必须越大。下面的GIF应该(希望)显示发

在使用Java的绘图工具时,我遇到了
Java.awt.GradientPaint
类,它允许在绘制形状时使用渐变着色。我决定玩玩它,在一个JPanel上画满了红色到绿色渐变的矩形,然后立刻注意到了一些奇怪的东西

当我开始画一个矩形时,它是一个纯红色,当我将它的高度或宽度增加到某个值后,就会出现渐变。在某些情况下,在梯度出现之前,矩形的高度或宽度必须较大(即200px)。然后我注意到,我开始绘制矩形时,越靠近JPanel的右侧或底部,在应用渐变之前,矩形的大小必须越大。下面的GIF应该(希望)显示发生了什么(用于创建此示例的代码在下面):

那么为什么会发生这种情况呢?是否有一种方法可以在绘制矩形后立即将渐变应用于矩形

(另请注意,是否有人知道在显示最后一帧后重新启动GIF动画的方法?)

那么根据

GradientPaint
公共GradientPaint(浮点x1,
浮动y1,
颜色 颜色1,
浮动x2,
浮动y2,
颜色 color2)

构造一个简单的非循环渐变绘制 对象。

参数:
x1-x坐标 用户空间中第一个指定点的值
y1-y 用户空间中第一个指定点的坐标
color1-第一个指定点的颜色
x2-用户界面中第二个指定点的x坐标 第二个指定点的空间
y2-y坐标 在用户空间中
color2-指定第二个位置的颜色 点

(重点由我补充)

x2
y2
参数不是宽度和高度,而是实际坐标

这意味着像

g2.setPaint(new GradientPaint(downX,downY,Color.red,dragX-downX,downY,Color.green));
实际上应该是

g2.setPaint(new GradientPaint(downX, downY, Color.red, dragX, downY, Color.green));

就我个人而言,我更喜欢使用这样的东西,因为它有更多的选择,但只有我;)

嘿,这会让我更加注意Javadocs所说的。不过,谢谢你;这已经困扰了我一段时间了。我肯定还会看一看
LinearGradientPaint
g2.setPaint(new GradientPaint(downX, downY, Color.red, dragX, downY, Color.green));