我创建了透明的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;
}
}
有人知道如何解决它吗?
环境:Ubuntu 14.04 with Cinnamon,java 1.8.0_74-b02
答案 0 :(得分:0)
我创建了透明的JDialog
在这种情况下不知道它是否是一个问题,但Swing和透明颜色不相处,因为你打破了Swing及其组件之间的绘画合约。查看Backgrounds With Transparency了解详情。
请尝试使用:
,而不是使用透明色dialog.setOpacity(...);
答案 1 :(得分:0)
虽然这可能是也可能不是问题的根源,但最好删除透明窗口的阴影。如果没有这些内容,我的程序(在Mac上)会烧掉#34;中断时阴影进入窗口显示。虽然它是单个显示器设置(MacBook屏幕),但在台式机之间切换会烧坏"阴影进入窗口显示。
JRootPane root = frame.getRootPane();
root.putClientProperty("Window.shadow", Boolean.FALSE);