当拖动到第二个屏幕时,透明的JDialog变得不透明(ubuntu 14.04和肉桂,java 1.8.0_74-b02)

当拖动到第二个屏幕时,透明的JDialog变得不透明(ubuntu 14.04和肉桂,java 1.8.0_74-b02),java,swing,jdialog,jwindow,Java,Swing,Jdialog,Jwindow,我创建了透明的JDialog,不幸的是它不能在两个屏幕上工作。当它被拖到另一个屏幕上时,它会变得不透明。代码如下,只需运行它并将标签拖动到其他屏幕 public class TransparentFrame{ public static void main(String[] args) { JDialog dialog = createDialog(); SwingUtilities.invokeLater(() -> dialog.setVisible(true));

我创建了透明的JDialog,不幸的是它不能在两个屏幕上工作。当它被拖到另一个屏幕上时,它会变得不透明。代码如下,只需运行它并将标签拖动到其他屏幕

public class TransparentFrame{

public static void main(String[] args) {
    JDialog dialog = createDialog();
    SwingUtilities.invokeLater(() -> dialog.setVisible(true));
}


private static JDialog createDialog() {
    JDialog dialog = new JDialog();

    JLabel label = new JLabel("drag me to the other screen");
    label.addMouseMotionListener(new MouseMotionAdapter() {
        @Override
        public void mouseDragged(MouseEvent e) {
            SwingUtilities.invokeLater(() -> dialog.setLocation(e.getLocationOnScreen()));
        }
    });
    label.setOpaque(false);
    dialog.getContentPane().add(label);

    dialog.setUndecorated(true);
    dialog.getRootPane().setWindowDecorationStyle(JRootPane.NONE);

    dialog.setBackground(new Color(0, 0, 0, 0));
    dialog.getContentPane().setBackground(new Color(0, 0, 0, 0));

    dialog.pack();
    return dialog;
}
}

有人知道怎么修吗

环境:Ubuntu14.04和肉桂,Java1.8.0_74-b02

我创建了透明JDialog

不知道在这种情况下这是否是一个问题,但是Swing和透明颜色不协调,因为您正在破坏Swing与其组件之间的绘制合同。查看更多信息

不要使用透明颜色,请尝试使用:

dialog.setOpacity(...);

尽管这可能是问题的根源,也可能不是问题的根源,但最好去除透明窗口的阴影。如果没有这些行,我的程序(在Mac上)会在中断时将阴影“烧掉”到窗口显示中。尽管是单显示器设置(MacBook屏幕),但在台式机之间切换会将阴影“烧掉”到窗口显示中

JRootPane root=frame.getRootPane();

putClientProperty(“Window.shadow”,Boolean.FALSE)

在我的三个屏幕上运行良好(运行Java1.7 compliance,用new Runnable()替换lambdas),您在Ubuntu或其他Linux上运行过吗?
dialog.getContentPane().setBackground(新颜色(0,0,0,0,0))
是个坏主意,请改用
setOpaque
(您需要先将
contentPane
置于
JPanel
对话框中)。getContentPane()是一种容器类型,它没有setOpaque()方法,即使它被强制转换为JPanel并调用了setOpaque方法,在这种情况下没有帮助。不幸的是,我的操作系统不支持不透明度。当不透明度设置为小于1f的值时,将引发异常:“java.lang.UnsupportedOperationException:不支持半透明半透明”。此外,不透明度会导致所有组件都是透明的。基于,使用基于alpha的颜色作为对话框背景是正确的,但对于内容窗格来说是错误的(是的,这并不令人困惑),同样,200k+也是正确的@camickr欢迎来到我的每一天;)不幸的是,添加这些线条后,一切都没有发生变化。@WojtekWirzbicki您至少看到阴影消失了吗(如果有阴影的话)?此外,查看正在发生的事情的图像可能会有所帮助。