Предел перекрасить JButton для изменения состояния? - PullRequest
0 голосов
/ 19 ноября 2011

После того, что я узнал из моего предыдущего вопроса , я хотел бы использовать текстуру для рисования текста на расширенной кнопке JButton во время ее нажатия. Первым шагом была настройка кнопки ChangeListener и метода stateChanged; У меня есть эти рабочие и могу установить цвет переднего плана в методе, так что текст будет один цвет, когда кнопка нажата, а другой, пока нет.

Основываясь на этом, я заменил вызов setForeground на код drawString, который я использовал для своих кнопок toggleButtons. Это работает, но сразу после того, как текст прорисован, он перезаписывается автоматически перекрашиваемой кнопкой. Я попытался добавить код в цикл while (model.isPressed ()), но это привело к довольно ужасным результатам (зависание системы). Как мне перерисовать кнопку вручную, чтобы она перерисовывалась только во время метода stateChanged?

1 Ответ

2 голосов
/ 19 ноября 2011

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

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

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

...