我有一个JDialog,我想用它作为游戏的覆盖层。对话框只是在我的屏幕中央画了一个自定义的十字准线,但很明显,因为fps游戏倾向于将玩家的光标居中,所以我无法使用我的任何武器,因为JDialog只是专注于。
我如何通过JDialog传递点击事件,以便下面的游戏接收它们,而不是我的JDialog。现在,我将其设置为undecorated,如果我单击实际的十字准线图形,它只会收到单击事件。
编辑:我为外部游戏创建了一个十字准线,而不是我自己的。
发布于 2015-07-13 17:58:51
这可能会有所帮助:
testDialog.setFocusableWindowState(false);从这里:Stop newly created dialog from taking focus
此外,也许在后面获取框架的Graphics对象并使用图形直接绘制十字准线会更好。
例如。
Graphics g = panel.getGraphics();
g.setColor(CROSSHAIR_COLOR);
g.drawLine(.....); // Vertical Line
g.drawLine(.....); // Horizontal Line发布于 2015-07-13 18:18:59
我发现这可以使用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;
}https://stackoverflow.com/questions/31380272
复制相似问题