透明框架在Windows中正常工作,但在Linux中无法正常工作

时间:2014-09-10 14:04:29

标签: java linux jframe transparent

以下代码在Windows(8.1)中生成透明窗口,但在Ubuntu(14.04)中生成不透明窗口。如何在Ubuntu 14.04中使用红色轮廓实现透明窗口?

我的目标是创建一个带有圆形(透明)边缘的未修饰窗口,因此setOpacity()方法不会有帮助,因为这会影响整个窗口,即使它确实有效在两个操作系统上。

public static void main(String[] args) {
    JFrame f = new JFrame();
    f.setUndecorated(true);
    f.setBackground(new Color(0,255,0,0));
    f.setSize(512, 512);
    f.add(new JPanel() {
        @Override
        protected void paintComponent(Graphics g) {
            g.setColor(Color.RED);
            g.drawRect(0, 0, 511, 511);
        }
    });
    f.setVisible(true);
}

2 个答案:

答案 0 :(得分:1)

我找到了问题的根源。它与在Ubuntu中安装多显示器有关。无论如何,这是解决方案 - 这将使其在受欢迎的监视器上工作:

在setVisible()调用之前添加以下代码:

    f.setLocationRelativeTo(null);

我认为它失败的原因是因为帧可能首先在辅助监视器上渲染(由于每个监视器的分辨率不同?),这可能导致此绘图错误。

谢谢大家的意见。非常感谢! :)

答案 1 :(得分:0)

并非Linux上的所有窗口管理器都支持透明窗口。如果窗口管理器不支持透明窗口,则t将显示为普通窗口。因此,首先检查您的窗口管理器是否支持透明窗口(使用GraphicsDevice#isWindowTranslucencySupported())。