AWTUtilities setWindowOpaque导致问题

时间:2011-09-27 21:46:45

标签: java swing jdialog awtutilities

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

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

如果我删除了对方法setWindowOpaque(this, false)的调用,则它可以正常运行。

有谁知道发生了什么事?

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

至少对我而言,解决方案是在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