首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何点击JDialog?

如何点击JDialog?
EN

Stack Overflow用户
提问于 2015-07-13 17:54:10
回答 2查看 80关注 0票数 0

我有一个JDialog,我想用它作为游戏的覆盖层。对话框只是在我的屏幕中央画了一个自定义的十字准线,但很明显,因为fps游戏倾向于将玩家的光标居中,所以我无法使用我的任何武器,因为JDialog只是专注于。

我如何通过JDialog传递点击事件,以便下面的游戏接收它们,而不是我的JDialog。现在,我将其设置为undecorated,如果我单击实际的十字准线图形,它只会收到单击事件。

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

EN

回答 2

Stack Overflow用户

发布于 2015-07-13 17:58:51

这可能会有所帮助:

代码语言:javascript
复制
testDialog.setFocusableWindowState(false);

从这里:Stop newly created dialog from taking focus

此外,也许在后面获取框架的Graphics对象并使用图形直接绘制十字准线会更好。

例如。

代码语言:javascript
复制
Graphics g = panel.getGraphics();
g.setColor(CROSSHAIR_COLOR);
g.drawLine(.....); // Vertical Line
g.drawLine(.....); // Horizontal Line
票数 0
EN

Stack Overflow用户

发布于 2015-07-13 18:18:59

我发现这可以使用JNA和下面的代码来实现;

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31380272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档