在swing中使用Robot来做模拟用户操作时,有些电脑会发生坐标与预期不同的问题。因为每台设备的分辨率以及缩放值都有所不同所以坐标的位置也有所改变。但我们可以获取分辨率,缩放值来重新调整坐标轴。
// 缩放比例
public void getScreenScalingFactor() {
// 获取图形环境
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
// 获取当前的图形设备,通常是主显示器
GraphicsDevice gd = ge.getDefaultScreenDevice();
// 获取屏幕分辨率
int screenWidth = gd.getDisplayMode().getWidth();
int screenHeight = gd.getDisplayMode().getHeight();
// 获取默认工具包
Toolkit toolkit = Toolkit.getDefaultToolkit();
// 获取屏幕尺寸(虚拟尺寸,非物理尺寸)
Dimension screenSize = toolkit.getScreenSize();
// 输出屏幕宽度和高度
int Width = screenSize.width;
int Height = screenSize.height;
final int TARGET_WIDTH = Width;
final int TARGET_HEIGHT = Height;
// 计算宽度和高度的缩放比
double widthScale = (double)screenWidth / TARGET_WIDTH;
double heightScale = (double)screenHeight / TARGET_HEIGHT;
// 选择更大的缩放比作为最终的缩放比
double scale = Math.max(widthScale, heightScale);
SCREEN_SCALE = (int) scale;
}
public void recordMouseClick(int x, int y) {
int javaX = x / SCREEN_SCALE;
int javaY = y / SCREEN_SCALE;
//切记!!!!!!!!!! 这里须先将坐标设置为-1
robot.mouseMove(-1,-1);
robot.mouseMove(javaX,javaY);
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
}