Я пытаюсь предотвратить перемещение курсора мыши (удерживать позицию курсора в центре приложения) и все еще иметь возможность обрабатывать событие mouseMoved
, чтобы повернуть камеру в космос. Я попытался сделать это с помощью java.awt.Robot.mouseMove(int x, int y)
, но он вызывает событие mouseMoved
, которое я использую для поворота камеры, поэтому камера возвращается к предыдущей позиции.Как захватить мышь в Java Swing?
ответ
И если вы просто игнорируете mouseMoved-Events, вызываемые Robot?
Вы можете сохранить позицию, робот переместил мышь. Если вы получите Mouse-Event именно с этими координатами мыши, просто проигнорируйте это событие. Для меня что-то вроде этого работал:
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
public class Test {
// position, where mouse should stay
private static final int fixX = 500;
private static final int fixY = 500;
private static Robot robo;
private static JFrame frame;
public static void main(String[] args) {
// create robot
try {
robo = new Robot();
} catch (AWTException e) {
e.printStackTrace();
}
// create default frame with mouse listener
frame = new JFrame("test frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent arg0) {
move(arg0);
}
@Override
public void mouseMoved(MouseEvent arg0) {
move(arg0);
}
});
frame.setSize(1000, 1000);
frame.setVisible(true);
}
private static void move(MouseEvent arg0) {
// check, if action was thrown by robot
if (arg0.getX() == fixX && arg0.getY() == fixY) {
// ignore mouse action
return;
}
// move mouse to center (important: position relative to frame!)
robo.mouseMove(fixX + frame.getX(), fixY + frame.getY());
// compute and print move position
int moveX = arg0.getX() - fixX;
int moveY = arg0.getY() - fixY;
System.out.println("moved: " + moveX + " " + moveY);
}
}
мышь остается на 500/500, вы получите ваши движения мыши, но вы иногда видите прыжки мыши, потому что робот не достаточно быстро.
Возможно, вы могли бы просто скрыть системный курсор (How to hide cursor in a Swing application?) и нарисовать свой собственный курсор.
Спасибо, это решил мою проблему. И ваша ссылка также полезна для меня. – Dimansel
- 1. Java Swing Scrolling, перетаскивая мышь
- 2. Как захватить событие закрытия в java swing
- 3. Как захватить мышь на Windows
- 4. Java/Swing JViewport перескакивает, когда мышь перетаскивается
- 5. Java swing: как обнаружить, когда мышь находится в покое
- 6. Как захватить элемент GUI Swing?
- 7. Java Swing - компонент исчезает после того, как мышь вводит JFrame
- 8. Мышь не двигается, когда нажимается какой-либо ключ Java Swing
- 9. Java Swing JFrame отключить мышь, зависающую для наложения
- 10. java swing checkboxes java swing
- 11. мышь движется слишком быстро, чтобы захватить события
- 12. Запретить элемент «захватить» мышь с помощью jQuery?
- 13. IndexOutOfBounds отслеживая мышь с swing gui
- 14. Как захватить вывод в Java
- 15. Как захватить аудиоданные в Java
- 16. Создание невидимой кнопки в Java Swing
- 17. Как приостановить Swing в Java?
- 18. Java Swing: ScrollableTooltip против ContextMenu
- 19. JAVA - Получить мышь, когда мышь нажата
- 20. Как я могу захватить все события мыши в JFrame/Swing?
- 21. Как захватить событие прокрутки, когда мышь не участвует?
- 22. CardsLayout в Java Swing
- 23. Кнопка Приходит после того, как на ней наводится мышь в графическом интерфейсе Java (Swing)?
- 24. EventQueue.invokeLater в Java Swing
- 25. Позиционирование в java swing
- 26. Таблицы в Java Swing
- 27. Swing Reuse в Java
- 28. Таймер в Java swing
- 29. Java Game - Мышь нажата и мышь перетащили
- 30. Java Swing GUI Скрытый ввод
Вы можете просто сделать два оператора if: if (mouseX> centerX) 'и' else if (x