为什么 JFrame 中的绘图颜色没有更新?
Why is the drawing color not updating in JFrame?
所以我正在为我的 java class 编写一个程序,只是为了好玩。它绘制分形,它的作用非常简单。除了改变我正在绘制的点的颜色之外,我得到了它的每个组件。我认为我做对了,但我显然不是,因为这是我使用 JFrame 的第一个项目,我完全陷入困境。这是我的绘画功能。 (我知道它从全局数组中提取值的效率很低,但我在这里画点,所以优化并不那么重要)
public void paint(Graphics g) {
for(int i = 0; i < arr.length; i++) {
g.setColor(new Color((int)Math.random()*256, (int)Math.random()*256, (int)Math.random()*256));
g.drawRect(toX(arr[i], (float)(arr[i])), toY(arr[i], (float)(arr[i])), 1, 1);
}
}
(int)Math.random()*256
转换具有很高的优先级。转换 random()
的结果会将其向下舍入为 0
。将其乘以 256 仍为零。这将始终是 Color(0, 0, 0)
- 黑色。添加额外的括号应该可以解决它。或者使用不带乘法的 float
s 构造函数。
旁注
您应该 @Override
paintComponent
在 Swing 中,但不应该在 JFrame
中。扩展 JComponent
并将其添加到框架中。
全局数组不应该是低效的,但是任何全局可变变量都是一个坏主意。
作为旁注(我通常扩展 JPanel
但 JComponent
也可以)您需要确保执行以下操作:
public void paintComponent(Graphics g) {
super.paintComponent(g); //<-------Do this.
// rest of your code
// here
}
否则window将无法正确更新。具体来说。
setColor
在你的子类中将无法正常工作。
- 子类的 window 每次调用
repaint()
时都没有正确重绘。
也可能会出现其他问题。
所以我正在为我的 java class 编写一个程序,只是为了好玩。它绘制分形,它的作用非常简单。除了改变我正在绘制的点的颜色之外,我得到了它的每个组件。我认为我做对了,但我显然不是,因为这是我使用 JFrame 的第一个项目,我完全陷入困境。这是我的绘画功能。 (我知道它从全局数组中提取值的效率很低,但我在这里画点,所以优化并不那么重要)
public void paint(Graphics g) {
for(int i = 0; i < arr.length; i++) {
g.setColor(new Color((int)Math.random()*256, (int)Math.random()*256, (int)Math.random()*256));
g.drawRect(toX(arr[i], (float)(arr[i])), toY(arr[i], (float)(arr[i])), 1, 1);
}
}
(int)Math.random()*256
转换具有很高的优先级。转换 random()
的结果会将其向下舍入为 0
。将其乘以 256 仍为零。这将始终是 Color(0, 0, 0)
- 黑色。添加额外的括号应该可以解决它。或者使用不带乘法的 float
s 构造函数。
旁注
您应该 @Override
paintComponent
在 Swing 中,但不应该在 JFrame
中。扩展 JComponent
并将其添加到框架中。
全局数组不应该是低效的,但是任何全局可变变量都是一个坏主意。
作为旁注(我通常扩展 JPanel
但 JComponent
也可以)您需要确保执行以下操作:
public void paintComponent(Graphics g) {
super.paintComponent(g); //<-------Do this.
// rest of your code
// here
}
否则window将无法正确更新。具体来说。
setColor
在你的子类中将无法正常工作。- 子类的 window 每次调用
repaint()
时都没有正确重绘。
也可能会出现其他问题。