Ошибка рендеринга прозрачности Java
В настоящее время я занимаюсь разработкой Java-программы в стиле киоска для отображения погоды, времени, прогноза и т. Д.should выглядеть (снимок экрана сделан до времени обновления)
Различные разделы создаются как JPanels сpaintComponent()
метод переопределен. Они рисуют в градиентном заголовке и полупрозрачном фоне. Тем не менее, когда я изменяю содержимое одной из этих панелей, предыдущий контент остается позади, а не удаляется. Пример показан ниже:
Как вы можете видеть, когда время изменилось с 11:51 на 11:52, числа перекрылись, и фон стал светлее (потому что поверх него был перерисован полупрозрачный фон)
The Graphical ErrorЧто я должен сделать, чтобы предотвратить это наложение? В конечном счете, я бы предпочел не перерисовывать весь экран, когда отдельная панель обновляет его содержимое. Я бы предпочел перерисовать только этот конкретный раздел. Было бы легко перекрасить фон, а затем все компоненты внутри.
UpdateНесколько ответов включают очистку области, которая будет нарисована. Пользуюсь ли яg.clear()
или жеAlphaComposite.CLEAR
это стирает фоновое изображение. это можно увидеть на следующем изображении. Возможно, если бы я мог скопировать фон, прежде чем очистить область, я мог бы перекрасить этот участок фона, а затем соответствующим образом наложить другие изображения. Мысли?
Был представлен ответ, в котором показан полный рабочий пример таймера с прозрачной панелью и фоном. Это очень полезно, однако я не рисую свои подкомпоненты вручную. Время, значки погоды и температуры - все это обозначения JLabels на полупрозрачной панели. Я бы предпочел не красить отдельные компоненты вручную.