将鼠标放在透明窗口中

时间:2016-04-19 22:32:49

标签: java swing jframe transparent key-events

所以我有一个透明窗口,绘制几行和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拥有所有绘画方法。谢谢你的帮助!

2 个答案:

答案 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;