java - 需要一个 java 处理类来将鼠标移动到窗口中心
问题描述
我一直在使用带有 java.awt.Robot 和 java.awt.Dimension 的处理来将鼠标锁定在屏幕中央。机器人将鼠标移动到相对于显示器,我需要它相对于窗口。我需要一个关于如何获取窗口位置或相对于窗口工作的机器人类的建议。
void MouseLock() {
if(mouseX != screensizex/2 || mouseY != screensizey/2) {
xmovement = (mouseX - screensizex/2);
Ymovement = (mouseY - screensizey/2);
try {
Robot screenWin = new Robot();
screenWin.mouseMove((int)screensizex/2, (int)screensizey/2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在禁用鼠标离开程序的同时获得我的 xmovement 和 ymovement 的任何东西都可以工作
解决方案
您可以使用这种独立于渲染器的方法获取窗口的左上角位置,并使用它来定位草图中心的坐标。请注意,您可能必须考虑标题栏的高度。
PVector getWindowLocation() {
PVector windowLocation = new PVector();
switch (sketchRenderer()) {
case P2D:
case P3D:
com.jogamp.nativewindow.util.Point p = new com.jogamp.nativewindow.util.Point();
((com.jogamp.newt.opengl.GLWindow) surface.getNative()).getLocationOnScreen(p);
windowLocation.x = p.getX();
windowLocation.y = p.getY();
break;
case FX2D:
final processing.javafx.PSurfaceFX FXSurface = (processing.javafx.PSurfaceFX) surface;
final javafx.scene.canvas.Canvas canvas = (javafx.scene.canvas.Canvas) FXSurface.getNative();
final javafx.stage.Stage stage = (javafx.stage.Stage) canvas.getScene().getWindow();
windowLocation.x = (float) stage.getX();
windowLocation.y = (float) stage.getY();
break;
case JAVA2D:
java.awt.Frame f = (java.awt.Frame) ((processing.awt.PSurfaceAWT.SmoothCanvas) surface.getNative())
.getFrame();
windowLocation.x = f.getX();
windowLocation.y = f.getY();
break;
}
return windowLocation;
}
推荐阅读
- c - 使用 C API 访问 Slurm 作业资源时的取消引用错误
- r - Base R 检查函数和包 - 尝试验证 Base R
- cloud - 错误:HWCREP0011E: 无法连接到存储库数据库。发生连接授权失败。原因:不支持安全机制
- javascript - “错误:ValidationError:用户名:路径‘用户名’是必需的。电子邮件:路径‘电子邮件’是必需的。密码:路径‘密码’是必需的。”
- python - 使用熊猫库总结python中的列值
- php - 如何从 HTML 节点中提取值
- javascript - 不能在 html 中包含外部 javascript
- vue.js - 如何触发模糊事件 Jest
- .net - 执行外部进程时超时不适用于 F# Async.RunSynchronously
- macos - PhpStorm (macOS) + Docker + Xdebug 不起作用