如何点击JDialog?

时间:2015-07-13 09:54:10

标签: java swing

我有一个JDialog,我想用它作为游戏的叠加层。该对话框只是在我的屏幕中央绘制一个自定义十字准线,但很明显,因为fps游戏往往使玩家光标居中,我无法使用任何武器,因为JDialog只是聚焦..

我如何通过JDialog传递点击事件,以便下面的游戏接收它们而不是我的JDialog。现在我把它设置为未修饰的,只有点击实际的十字线图形才会收到点击事件。

编辑:我为外部游戏创建了一个十字准线,而不是我自己的。[/ p>

2 个答案:

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