Как перекрасить после исчезновения всплывающей подсказки?
Я создал апплет, который имеет одну большую панель для отображения данных, окруженную несколькими элементами управления (кнопки, текстовые поля и т. Д.). Большая панель содержит несколько слоев надписей, которые я создаю сам.
У всех элементов управления есть подсказки, связанные с ними, и некоторые из этих подсказок перекрывают основную панель. Когда они исчезают, они оставляют дыру в изображении главной панели, пока главная панель не будет перекрашена.
Теперь заметьте, это не всегда происходит. Это происходит только тогда, когда курсор находится в определенном диапазоне. Если вы достаточно далеко ушли влево или вправо (для изменений вдоль оси Y различий не отмечено), отверстия исчезают, когда подсказка исчезает.
Я не очень разбираюсь в том, как должны работать подсказки и перерисовка, и если это признак того, что с моей программой что-то ужасно не так, но если я могу просто вызывать repaint на главной панели всякий раз, когда подсказка исчезает, я должен быть в порядке. Есть ли что-то, что я могу переопределить во всплывающей подсказке, чтобы это произошло?
Я использую Swing
Благодарю.
1 ответ
Чтобы ответить на ваш вопрос (после того, как вы нашли решение по комментариям): в Swing встроено довольно сложное управление перерисовкой. Когда всплывающая подсказка исчезает, прямоугольник под ней перерисовывается.
Теперь, какие компоненты должны быть перекрашены? Все те, кто перекрывается с данным прямоугольником и сами не скрыты (в рассматриваемой области) другими компонентами - здесь учитываются только непрозрачные компоненты. (Это единственная причина, по которой нам нужно opaque
свойство на JComponent - для оптимизации перекраски.)
Ваш лейбл объявил себя непрозрачным, но на самом деле не нарисовал всю область на paintComponent
и такая область всплывающей подсказки, которая должна была быть закрыта этикеткой, оставалась неокрашенной.
Объявление вашей этикетки частично прозрачной также привело к перекрашиванию соответствующей области компонента за ней.