Ошибка рендеринга Java Transparency

В настоящее время я разрабатываю Java-программу в стиле киоска для отображения погоды, времени, прогноза и т. д. Вот снимок того, как должна выглядеть программа (снимок экрана, сделанный до обновления времени)

Image showing required output before the graphical error

Различные разделы создаются как панели JPanel с переопределением метода paintComponent(). Они рисуют градиентный заголовок и полупрозрачный фон. Однако, когда я изменяю содержимое одной из этих панелей, предыдущее содержимое остается, а не удаляется. Пример показан ниже:

Как видите, при изменении времени с 11 :51 на 11 :52 числа перекрывались, а фон становился светлее (, так как поверх него перерисовывался полупрозрачный фон)

Графическая ошибка

Image showing the graphical error

Что мне делать, чтобы предотвратить это совпадение? В конечном счете, я бы предпочел не перерисовывать весь экран, когда отдельная панель обновляет свое содержимое. Я бы предпочел перерисовать только этот конкретный раздел. Было бы легко перекрасить фон, а затем и все компоненты внутри.

Обновление

Несколько ответов включают очистку области, которую нужно нарисовать. Независимо от того, использую ли я g.clear()или AlphaComposite.CLEAR, фоновое изображение стирается. это можно увидеть на следующем изображении. Возможно, если бы я мог скопировать фон до того, как очистил область, я мог бы перекрасить эту часть фона, а затем соответствующим образом наложить другие изображения. Мысли?

enter image description here

Обновление 2

Был отправлен ответ, в котором показан полный рабочий пример таймера, наложенного на прозрачную панель и фон. Это очень полезно, однако я не раскрашиваю компоненты sub -вручную. Время, погодные значки и температура — все это JLabels размещено на полупрозрачной -панели.Я бы предпочел не красить отдельные компоненты вручную.

8
задан Peaches491 30 July 2012 в 13:39
поделиться