以下代码在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);
}
答案 0 :(得分:1)
我找到了问题的根源。它与在Ubuntu中安装多显示器有关。无论如何,这是解决方案 - 这将使其在受欢迎的监视器上工作:
在setVisible()调用之前添加以下代码:
f.setLocationRelativeTo(null);
我认为它失败的原因是因为帧可能首先在辅助监视器上渲染(由于每个监视器的分辨率不同?),这可能导致此绘图错误。
谢谢大家的意见。非常感谢! :)
答案 1 :(得分:0)
并非Linux上的所有窗口管理器都支持透明窗口。如果窗口管理器不支持透明窗口,则t将显示为普通窗口。因此,首先检查您的窗口管理器是否支持透明窗口(使用GraphicsDevice#isWindowTranslucencySupported())。