所以我有一个透明窗口,绘制几行和hud元素。我想知道当我按下热键设置(比如ctrl-s或其他东西)时,是否有办法让鼠标在所述窗口内的位置,并保存鼠标x和y所以我可以使用更新的变量重新绘制框架。
我的框架代码是:
JFrame frame = new JFrame();
frame.setUndecorated(true);
frame.add(new AimDriver());
frame.setBackground(new Color(0,0,0,0));
frame.setSize(resolutionX, resolutionY);
frame.setAlwaysOnTop(true);
frame.setVisible(true);
其中aimDriver拥有所有绘画方法。谢谢你的帮助!
答案 0 :(得分:3)
calc
提供了优于KeyBinding
的几个优势。也许最重要的优点是KeyListener
不会受到可能困扰KeyBinding
的焦点问题的影响(详见this question。)
以下方法遵循KeyBinding
Java Tutorial。首先,创建一个KeyListener
来捕获鼠标在窗口中的位置:
AbstractAction
注意:测试窗口是否包含鼠标位置非常重要;如果你不这样做,鼠标位置很容易包含一个无意义的坐标(例如(-20,199930),这甚至意味着什么?)。
现在您已完成所需操作,请创建相应的AbstractAction action = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
Point mLoc = MouseInfo.getPointerInfo().getLocation();
Rectangle bounds = frame.getBounds();
// Test to make sure the mouse is inside the window
if(bounds.contains(mLoc)){
Point winLoc = bounds.getLocation();
mouseLoc = new Point(mLoc.x - winLoc.x, mLoc.y - winLoc.y);
}
}
};
。
KeyBinding
答案 1 :(得分:0)
为您的框架对象添加一个Key Listener。您可以使用this帖子作为参考。从上面的帖子转到keyPressed事件,并用代码替换println方法以检索鼠标指针位置并更新您的位置变量。您应该能够使用此代码获取JFrame中的相对鼠标坐标。
int xCoord = MouseInfo.getPointerInfo().getLocation().x - frame.getLocationOnScreen().x;
int yCoord = MouseInfo.getPointerInfo().getLocation().y - frame.getLocationOnScreen().y;