我有一个JDialog,我想用它作为游戏的叠加层。该对话框只是在我的屏幕中央绘制一个自定义十字准线,但很明显,因为fps游戏往往使玩家光标居中,我无法使用任何武器,因为JDialog只是聚焦..
我如何通过JDialog传递点击事件,以便下面的游戏接收它们而不是我的JDialog。现在我把它设置为未修饰的,只有点击实际的十字线图形才会收到点击事件。
编辑:我为外部游戏创建了一个十字准线,而不是我自己的。[/ p>答案 0 :(得分:0)
这可能有所帮助:
testDialog.setFocusableWindowState(false);
从这里: Stop newly created dialog from taking focus
除此之外,也许你最好在后面获取框架的Graphics对象并使用图形直接绘制十字准线。
E.g。
Graphics g = panel.getGraphics();
g.setColor(CROSSHAIR_COLOR);
g.drawLine(.....); // Vertical Line
g.drawLine(.....); // Horizontal Line
答案 1 :(得分:0)
我发现使用JNA和以下代码可以实现这一点;
private static void setTransparent(Component w) {
WinDef.HWND hwnd = getHWnd(w);
int wl = User32.INSTANCE.GetWindowLong(hwnd, WinUser.GWL_EXSTYLE);
wl = wl | WinUser.WS_EX_LAYERED | WinUser.WS_EX_TRANSPARENT;
User32.INSTANCE.SetWindowLong(hwnd, WinUser.GWL_EXSTYLE, wl);
}
/**
* Get the window handle from the OS
*/
private static HWND getHWnd(Component w) {
HWND hwnd = new HWND();
hwnd.setPointer(Native.getComponentPointer(w));
return hwnd;
}