В чем разница между Graphics.clearRect и Graphics.drawRect? - PullRequest
0 голосов
/ 04 мая 2011

Я нашел ошибку рендеринга в некотором коде и нашел обходной путь, но я хотел бы знать, почему у меня другое поведение. В старом коде фон (иногда) отображается белым, несмотря на то, что при отладке getBackground() будет возвращаться правильный цвет.

Старый код:

@Override
public void paint(Graphics g) {
  // Stuff

  g.setColor(getBackground());
  g.clearRect(0, 0, width, height); // Obviously wrong.

  // More stuff
}

Новый код:

@Override
public void paint(Graphics g) {
  // Stuff

  g.setColor(getBackground());
  g.drawRect(0, 0, width, height); // Correct usage with 'setColor' call.

  // More stuff
}

Как я указал в коде, очевидно, что setColor(getBackground()) не влияет на вызов clearRect(...). Тем не менее, я бы предположил, что вызов clearRect(...) и вызов setColor(getBackground()) с последующим drawRect(...) будут семантически одинаковыми.

Я также рассмотрел свойство opaqueness, но все родительские облегченные компоненты и родительский компонент используют один и тот же цвет фона, и совершенно очевидно, что этот компонент имеет неправильное поведение (это один из 8 компонент того же типа, который принадлежит его родителю - но только те, которые попадают в этот раздел кода, имеют проблемы).

Я использую JDK 1.6.0_07 (по деловым причинам, конечно), если это поможет.

Ответы [ 2 ]

3 голосов
/ 04 мая 2011

Вот информация из JavaDocs -

Очищает указанный прямоугольник, заполняя его цветом фона текущей поверхности рисования.Эта операция не использует текущий режим рисования.

Начиная с Java 1.1, цвет фона закадровых изображений может зависеть от системы.Приложения должны использовать setColor, а затем fillRect, чтобы гарантировать, что закадровое изображение очищается до определенного цвета.

Как это подразумевает, clearRect зависит от системы, и значение getBackground () не учитывается.

0 голосов
/ 05 ноября 2012

Разница заключается в следующем:

  • если вы используете графический метод fillRect (), вы не можете стереть цвет с помощью drawRect () поверх того же объекта, указанного в пикселях.
  • но если вы используете графический метод fillRect (), то очистите его с помощью clearRect () и после этого drawRect ();Вы достигаете удовлетворения и заключения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...