Как перекрасить после исчезновения всплывающей подсказки? - PullRequest
2 голосов
/ 18 апреля 2011

Я создал апплет, который имеет одну большую панель для отображения данных, окруженную несколькими элементами управления (кнопки, текстовые поля и т. Д.). Большая панель содержит несколько слоев надписей, которые я рисую сам.

У всех элементов управления есть подсказки, связанные с ними, и некоторые из этих подсказок перекрывают основную панель. Когда они исчезают, они оставляют дыру в изображении главной панели, пока главная панель не будет перекрашена.

Теперь учтите, это не всегда происходит. Это происходит только тогда, когда курсор находится в определенном диапазоне. Если вы достаточно далеко ушли влево или вправо (различий по оси Y не отмечено), отверстия исчезают, когда всплывающая подсказка исчезает.

Я не очень разбираюсь, как должны работать подсказки и перерисовка, и если это признак того, что с моей программой что-то ужасно не так, но могу ли я просто вызывать repaint на главной панели всякий раз, когда подсказка исчезает Я должен быть в порядке. Есть ли что-то, что я могу переопределить во всплывающей подсказке, чтобы это произошло?

Я использую Swing

Спасибо.

1 Ответ

1 голос
/ 19 апреля 2011

Чтобы ответить на ваш вопрос (после того, как вы нашли решение по комментариям): в Swing встроено довольно сложное управление перерисовкой. Когда всплывающая подсказка исчезает, прямоугольник под ней перерисовывается.

Теперь, какие компоненты должны быть перекрашены? Все те, кто перекрывается с данным прямоугольником и сами не скрыты (в рассматриваемой области) другими компонентами - здесь учитываются только непрозрачные компоненты. (Это единственная причина, по которой нам нужно свойство opaque в JComponent - для оптимизации перерисовки.)

Ваша метка объявила себя непрозрачной, но на самом деле не пометила всю область на paintComponent, и такая область подсказки, которая должна была быть покрыта меткой, осталась неокрашенной.

Объявление вашей этикетки частично прозрачной также привело к перекрашиванию соответствующей области компонента за ней.

...