AWTUtilities setWindowOpaque 导致问题

发布于 2024-12-07 00:30:25 字数 543 浏览 2 评论 0原文

我有一个模态 JDialog,通过调用 com.sun.awt.AWTUtilities 方法,setWindowOpaque(this, false)

当我将模态 JDialog 设置为非透明时遇到问题。例如,当我单击一个非不透明对话框的按钮时,它会正确弹出,但在打开和关闭对话框几次后,它确实会打开。它是不可见的;而且,由于它是模态的,我们无法单击父面板中包含的按钮。就像它被冻结一样,但这只是因为模式对话框。

如果我删除对方法 setWindowOpaque(this, false) 的调用,它就可以正常工作。

有谁知道发生了什么事吗?

我在 Windows XP 上使用 Java 版本“1.6.0_26”。

谢谢。

I have a modal JDialog that I set non-opaque with a call to the com.sun.awt.AWTUtilities method, setWindowOpaque(this, false).

I encounter problems when I set the modal JDialog to be non-opaque. For example, when I click on a button a non-opaque dialog, it pop up correctly but after a couple of opening and closing of the dialog, it does open. It is not visible; and, since it is modal, we can't click on the button contained in the parent panel. It's like it is frozen, but that's only because of the modal dialog.

If I remove the call to the method setWindowOpaque(this, false), it works without any problem.

Does anyone know what is going on?

I am using Java version "1.6.0_26" on Windows XP.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倾`听者〃 2024-12-14 00:30:25

好的,有类似的问题,有时窗口没有响应,或者透明度被破坏......奇怪的问题。

至少对我来说,解决方案是在 invokeLater 中调用 newTransparentWindow()

SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
        TransparentWindow w = new TransparentWindow();
        w.setVisible(true);
    }
});

TransparentWindow 是一个扩展 JWindow 的类,它使用 com.sun.awt.AWTUtilities。 setWindowOpaque(window,false); 创建一个带有圆角透明角的透明窗口,如下所述:软剪裁和Swing 窗口的每像素半透明度

Ok, had a similar problem, sometimes the window was not responding, or transparency was broken... weird problems.

The solution, at least for me, was calling new TransparentWindow() inside invokeLater:

SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
        TransparentWindow w = new TransparentWindow();
        w.setVisible(true);
    }
});

TransparentWindow is a class extending JWindow that uses com.sun.awt.AWTUtilities.setWindowOpaque(window,false); to create a transparent window with rounded transparent corners as explained here: Soft clipping and per-pixel translucency for Swing windows

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文