当拖动到第二个屏幕时,透明的JDialog变得不透明(ubuntu 14.04和肉桂,java 1.8.0_74-b02)
我创建了透明的JDialog,不幸的是它不能在两个屏幕上工作。当它被拖到另一个屏幕上时,它会变得不透明。代码如下,只需运行它并将标签拖动到其他屏幕当拖动到第二个屏幕时,透明的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));
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您至少看到阴影消失了吗(如果有阴影的话)?此外,查看正在发生的事情的图像可能会有所帮助。