为什么在JFrame中不更新图形颜色?

问题描述 投票:1回答:2

所以我正在为我的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);

    }
}
java colors jframe awt
2个回答
0
投票

(int)Math.random()*256

发布具有很高的优先级。强制转换random()的结果会将其四舍五入为0。将其乘以256仍为零。这将始终是Color(0, 0, 0)-黑色。添加额外的括号应该可以解决该问题。或者使用float s构造函数而不使用乘法。

旁注

您应该在Swing中选择@Override paintComponent,但不要在JFrame中使用。扩展JComponent并将其添加到框架中。

全局数组不应该是低效率的,但是任何全局变量都是一个坏主意。


0
投票

作为旁注(我通常会扩展JPanel,但JComponent也可以使用),您需要确保执行以下操作:

public void paintComponent(Graphics g) {
    super.paintComponent(g); //<-------Do this.
    // rest of your code
    // here
}

否则,窗口将无法正确更新。具体来说。

  1. setColor在您的子类中将无法正常工作。
  2. 每次调用repaint()时,子类的窗口都无法正确重绘。

也可能发生其他问题。

© www.soinside.com 2019 - 2024. All rights reserved.