Я использую интерфейс Swing в игре, в которой я программирую, и я использую ActionListener и MouseListener.Для этой конкретной проблемы MouseListener - это проблема.
для метода mouseEntered, у меня есть ряд операторов if, которые по существу решают, допустима ли на данный момент мозаичная плитка для построения или нет, а курсор превращается в X(для обозначения недопустимой цели), пока не будет вызван метод mouseExited.Эта система работает просто отлично, за исключением одной вещи.
Один из критериев, по которым плитки могут быть незаконными для постройки, заключается в том, идет ли враг по этой плитке.Если я наведу курсор на плитку с врагом, она фактически изменится, как я и предполагал.Однако, поскольку это метод, который срабатывает, когда мышь входит в компонент, когда мышь находится в этом компоненте, он больше не обновляется, пока не покинет этот компонент.
Поэтому, если мой курсор находится на плитке, котораялегальная цель, он будет отображать курсор по умолчанию, как и предполагалось.Однако, если я подожду и враг войдет в этот тайл, так как мышь не сдвинулась, курсор останется по умолчанию, так как если он все еще является законной целью (конечно, мои методы, которые на самом деле строятся на тайл, не позволятмне построить, потому что они знают, что это недопустимая цель, но пользователь не увидит этого из-за невозможности обновления курсора).В том же отношении, оставив мой курсор на плитке, которая является недопустимой только потому, что там находится враг, курсор останется как X даже после того, как враг перешел (хотя мои методы сборки снова позволят мне строить).
Как я могу вызвать метод mouseEntered явно, с тем же событием, что и аргумент, как если бы мышь только что переместилась в точку, в которой она находится в данный момент?