Перекрасить и Mouselistener Java - PullRequest
       57

Перекрасить и Mouselistener Java

0 голосов
/ 24 ноября 2018

Итак, у меня есть парадокс, когда мне добавили mouseListener в мой мэйнфрейм.Когда мышь вводится, она имеет цикл, чтобы проверить, превышает ли прошедшее время определенный предел, поэтому она регистрируется как удержание.Это должно быть в потоке, потому что в противном случае я не мог бы проверять клики, так как мой основной поток был бы заблокирован (или не так ли?).Но проблема в том, что я хочу показывать информацию, пока кнопка мыши все еще нажата, что требует от меня вызова перерисовки из потока, который не будет работать, поскольку перерисовка работает только из основного потока, но этот должен быть свободным дляMouseListener ... У кого-нибудь есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 24 ноября 2018

Когда мышь введена, в ней есть цикл, чтобы проверить, превышает ли прошедшее время определенный предел

Не использовать цикл.Если это выполняется в слушателе, то вы будете блокировать поток обработки событий (EDT).

Вместо этого используйте Swing Timer .Когда вы входите в компонент, вы запускаете таймер.Затем таймер сгенерирует событие по истечении заданного вами интервала времени.

Однако вы также можете остановить таймер, если генерируется какое-то другое событие, и вы хотите сбросить таймер.

Это не будетзаблокируйте Event Dispatch Thread (EDT), и события по-прежнему будут генерироваться в обычном режиме.

Я хочу показать информацию, пока кнопка мыши все еще нажата

Не уверен, что "все еще нажал"средства.Если кнопка все еще нажата, и вы выполняете код из ActionListener, вы заблокируете EDT, и графический интерфейс пользователя не сможет перерисовать себя, пока не будет завершена долгосрочная задача.

Чтение раздела из Swingучебник по Concurrency для получения дополнительной информации о EDT.

...