2013-07-19 3 views
3

Когда я использую компоненты JCheckBox или JScrollPane (применительно к основной компоненте, который содержит все другие для того, чтобы генерировать прокручивать окно) вместе с компонентами, которые используютНеисправных перекрасить() распашные компоненты при использовании пользовательских цветов фона

component.setBackground(new Color(R, G, B, A)); 

, чтобы определить их цвет фона, я получаю некоторые неприятные проблемы repaint(). Наведение на JCheckboxes активирует MouseListener, и фон JCheckbox внезапно отобразит случайную другую часть окна. Это остается даже при отключении мыши от JCheckbox.

Проблема исчезает при использовании

JCheckbox.setRollOverEnabled(false); 

НО все еще будет происходить при выборе флажка!

Прокрутка также не будет правильно перерисовываться. ТОЛЬКО части, которые находятся за пределами видимой рамки, будут окрашиваться несколько раз подряд в направлении прокрутки, когда они возвращаются в рамку. Он похож на эту ошибку в ОС Windows, когда программа выходит из строя, и вы можете «рисовать» с окном на экране, потому что он «генерирует» новое окно каждый раз, когда вы его перемещаете (http://i.stack.imgur.com/L5G5Q.png).

Самое интересное заключается в том, что проблема полностью исчезает, когда я использую

Color.grey (or any other pre-generated color) 

Он также исчезает, когда не выбирая собственный цвет фона на всех.

Так есть проблема с revalidate() и перерисовать(), скрытую в этом месте? Является ли использование RGBA проблемой, в частности, частью A (= непрозрачность), так как Color.AnyColor работает?

ответ

4

Является ли использование RGBA проблемы, в частности, A (= Непрозрачность) часть

Да, смотрите Backgrounds With Transparency для объяснения и решения.

+0

Большое спасибо! Незадолго до того, как я проверил ваш ответ, я тоже смог подтвердить это. Установка непрозрачности до максимального значения (255) полностью устранит эту проблему. – ChrisK