我有一个模态JDialog,我通过调用com.sun.awt.AWTUtilities方法setWindowOpaque(this, false)将其设置为不透明。

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

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

有人知道发生了什么吗?

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

谢谢。

最佳答案

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

解决方案,至少对我来说,是在new TransparentWindow()内调用invokeLater

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


TransparentWindow是扩展JWindow的类,该类使用com.sun.awt.AWTUtilities.setWindowOpaque(window,false);来创建带有圆角透明角的透明窗口,如下所述:Soft clipping and per-pixel translucency for Swing windows

09-15 15:17