происходит только в Metal L & F.
У вас все еще есть проблема, даже если вы специально не устанавливаете LAF.
Если я установлюBorder border1 на JPanel, затем я изменяю Border на border2 на том же JPanel, когда всплывающая подсказка переходит на border2, перерисовывает перерисовку border1
Это не имеет никакого отношения к всплывающей подсказке.
Просто нажмите на пару квадратов, а затем измените размер рамки, и все границы будут перекрашены синим цветом.
Проблема в вашем ColorsBoard
классе.
Вы НЕ должны переопределятьpaintComponent()
метод для создания компонентов.
Метод рисования используется только для рисования.
Метод paintComponent () вызывается всякий раз, когда Swing определяет, что компонент необходимо перекрасить.Вот почему изменение размера кадра также вызывает проблему.Вы воссоздаете все компоненты.
Решение:
- Не переопределяйте метод paintComponent ()!
- Создайте все компоненты в конструкторе вашегокласс
- Не используйте пустой макет.Вместо этого используйте GridLayout на панели и просто добавьте свои квадраты в сетку.
- используйте
setBackground(Color.LIGHT_GRAY)
в конструкторе для установки фона
Также:
- избавьтесь от всех ключевых слов
synchronized
в ваших методах.Они не нужны. - Не используйте "==" для сравнения объектов.Используйте метод
equals(...)
.