Я только сказал ему, чтобы вызвать setText () при нажатии.
При изменении свойства компонента возможно изменение размера компонента. Если размер изменяется, возможно, это повлияет на макет всех компонентов, поэтому вызывается менеджер макета. После вызова диспетчера макета для всех элементов может быть настроен размер / расположение, поэтому все компоненты на панели перекрашиваются.
Этот процесс выполняется автоматически c, что приводит к проблеме с вашим кодом.
Метод рисования должен быть только для рисования. Вы НЕ должны изменять свойства своего класса в методе рисования.
int red = (int) (Math.random()*255);
int green = (int) (Math.random()*255);
int blue = (int) (Math.random()*255);
Color randomizer = new Color(red, green, blue);
Приведенный выше код НЕ должен быть в вашем методе рисования. Опять же, вы не можете контролировать, когда вызывается метод paintComponent (). Таким образом, ваш случайный цвет будет генерироваться каждый раз, когда Swing решит, что панель должна быть перекрашена.
Вместо этого вам необходимо:
- добавить «randomizer» как переменную экземпляра в вашем классе.
- добавьте метод, подобный
generateRandomColor()
, чтобы установить значение для этой переменной, которое вы могли бы вызывать в конструкторе вашего класса или вызывать после создания пользовательской панели. - изменить логи рисования c для ссылки на эту переменную "randomizer".