Почему цвет рисунка не обновляется в JFrame? - PullRequest
1 голос
/ 21 ноября 2019

Итак, я писал программу для своего 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);

    }
}

Ответы [ 2 ]

1 голос
/ 21 ноября 2019

(int)Math.random()*256

Приведения имеют очень высокий приоритет. Приведение результата random() округляет его до 0. Умножение на 256 все равно равно нулю. Это всегда будет Color(0, 0, 0) - черный. Добавление дополнительных скобок должно исправить это. Или используйте конструктор float s без умножения.

Примечания стороны

Вы должны @Override paintComponent в Swing, но не в JFrame. Расширьте JComponent и добавьте это во фрейм.

Глобальный массив не должен быть неэффективным, но любые глобальные изменяемые файлы - плохая идея.

0 голосов
/ 21 ноября 2019

В качестве дополнительного примечания (я обычно расширяю JPanel, но JComponent также будет работать), вам необходимо убедиться, что вы делаете следующее:

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

В противном случае окно не будет корректно обновлено. В частности.

  1. setColor в вашем подклассе не будет работать должным образом.
  2. Окно подкласса не будет корректно перерисовываться при каждом вызове repaint().

Могут также возникнуть другие проблемы.

...