所以我正在为我的Java类编写程序,只是为了好玩。它会绘制分形,其作用非常简单。除了改变我绘制的点的颜色之外,我让它的所有组件都能正常工作。我想我做对了,但是我显然做错了,因为这是我第一个使用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构造函数而不使用乘法。
旁注
您应该在Swing中选择@Override
paintComponent
,但不要在JFrame
中使用。扩展JComponent
并将其添加到框架中。
全局数组不应该是低效率的,但是任何全局变量都是一个坏主意。
作为旁注(我通常会扩展JPanel
,但JComponent
也可以使用),您需要确保执行以下操作:
public void paintComponent(Graphics g) {
super.paintComponent(g); //<-------Do this.
// rest of your code
// here
}
否则,窗口将无法正确更新。具体来说。
setColor
在您的子类中将无法正常工作。repaint()
时,子类的窗口都无法正确重绘。也可能发生其他问题。