Java 如何单击JDialog?
我有一个JDialog,我想用它作为游戏的覆盖。这个对话框只是在我的屏幕中央画了一个自定义十字线,但很明显,由于fps游戏倾向于将玩家光标居中,我无法使用我的任何武器,因为JDialog只是聚焦 我如何通过JDialog传递点击事件,以便下面的游戏接收它们而不是我的JDialog。现在我将它设置为“未装饰”,只有在我单击实际的十字线图形时,它才会接收单击事件 编辑:我为外部游戏创建了一个十字线,而不是我自己的。这可能会有帮助:Java 如何单击JDialog?,java,swing,Java,Swing,我有一个JDialog,我想用它作为游戏的覆盖。这个对话框只是在我的屏幕中央画了一个自定义十字线,但很明显,由于fps游戏倾向于将玩家光标居中,我无法使用我的任何武器,因为JDialog只是聚焦 我如何通过JDialog传递点击事件,以便下面的游戏接收它们而不是我的JDialog。现在我将它设置为“未装饰”,只有在我单击实际的十字线图形时,它才会接收单击事件 编辑:我为外部游戏创建了一个十字线,而不是我自己的。这可能会有帮助: testDialog.setFocusableWindowState
testDialog.setFocusableWindowState(false);
从这里开始:
除此之外,最好是将帧的图形对象放在后面,并使用图形直接绘制十字线
例如
我发现使用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;
}
我仍然无法点击它,我的鼠标光标在它上面变得可见,当我点击底层游戏时,什么也没有发生,这也是我当前绘制十字线的方式。那你为什么需要这个对话框呢?也许你可以把它拿走?对于您的问题:另一个选项是在对话框中捕捉mouseevent。调用panel.myOnClickMethodclickX+dialogOffset,clickY+dialogOffset我需要这个对话框来获得一个图形对象来绘制?因为swing中的任何面板、框架或一般组件都将使用getGraphics方法。为什么要使用JDialog来实现这种功能?那完全是倒退。我在这方面没有经验。你能推荐一个替代方案吗?
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;
}