Я нашел ошибку рендеринга в некотором коде и нашел обходной путь, но я хотел бы знать, почему у меня другое поведение. В старом коде фон (иногда) отображается белым, несмотря на то, что при отладке 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 (по деловым причинам, конечно), если это поможет.