Мне кажется, что вы идете неправильным путем, чтобы изменить внешний вид вашей кнопки. Я думаю, вам будет проще создать класс, который будет обрабатывать внешний вид вашей кнопки, а не обрабатывать параметры рисования вашей кнопки внутри кода кнопки вручную. Блокировка вызовов repaint()
на самом деле не лучший способ, я верю в ваше дело.
Я бы лично создал свою собственную реализацию ButtonUI
, которая будет обрабатывать все правила рисования (например, цвет переднего плана, основанный на состоянии кнопки), затем я бы вызвал setUI
на кнопке, указав экземпляр этого нового ButtonUI
как параметр. Если вы не хотите обрабатывать все элементы рисования, вы всегда можете использовать свой новый класс в качестве прокси для уже существующего обработчика пользовательского интерфейса кнопки (с помощью метода getUI()
JButton) и вносить изменения только там, где они вам нужны (у меня нет сам не проверял, но я уверен, что он будет работать нормально).
Конечно, это представляет собой больше кода для вас, но это локализует ваш внешний вид и восприятие в одном классе и будет соответствовать стилю работы Swing. В Интернете есть несколько ресурсов, с которых можно начать ( здесь , здесь и здесь ).