Вопрос

Я хотел бы заблокировать мышь внутри JFrame.То есть мышь не может покинуть содержимое JFrame (если только пользователь не нажмет escape, alt-tab или окно иным образом не потеряет фокус).Идеи?

Спасибо!

Это было полезно?

Решение

Я не уверен, есть ли более автоматический способ сделать это, но вы могли бы использовать Класс роботов чтобы установить положение мыши.Таким образом, в обработчике событий, когда JFrame получает фокус, вы можете начать наблюдать событие перемещения мыши, и когда мышь перемещается, просто убедитесь, что она остается в пределах JFrame.Если он покидает JFrame, вы можете использовать класс Robot, чтобы вернуть положение мыши в исходное положение.

Затем, когда окно потеряет фокус, вы можете отменить регистрацию в событии перемещения мыши.

Другие советы

Класс Robot идеально подходит для такого рода задач, но я бы предложил другой подход.

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

Другой обходной путь, о котором я только что подумал, - зафиксируйте курсор в центре рамки и сделайте его невидимым.Затем отобразите программный курсор там, где должен быть реальный курсор.Затем вы можете зафиксировать курсор в любой области, которую вы хотите.

Вот хитрый способ, который может сработать, если вы не используете кнопку мыши 2 в своей игре.Используйте Робота, чтобы нажать кнопку 2.

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

Всякий раз, когда вы получаете событие перетаскивания мышью, если мышь находится за пределами окна, вставьте ее обратно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top