Java 如何在没有窗口管理器的情况下在SWT中创建透明shell?
我在shell上使用SWT setAlpha()方法。透明度在KDE和GNOME环境中正常工作,即在终端中键入:Java 如何在没有窗口管理器的情况下在SWT中创建透明shell?,java,linux,swt,transparency,xorg,Java,Linux,Swt,Transparency,Xorg,我在shell上使用SWT setAlpha()方法。透明度在KDE和GNOME环境中正常工作,即在终端中键入: java -jar program.jar 但是当我在没有窗口管理器的纯X上启动java应用程序时,shell是不透明的,并且有白色背景。我使用命令startx和X执行我的~/.xinitrc脚本,该脚本包含: cd /home/user java -jar ./program.jar 以下是方法代码: public void showTransparentShell() {
java -jar program.jar
但是当我在没有窗口管理器的纯X上启动java应用程序时,shell是不透明的,并且有白色背景。我使用命令startx和X执行我的~/.xinitrc脚本,该脚本包含:
cd /home/user
java -jar ./program.jar
以下是方法代码:
public void showTransparentShell() {
transparentShell = new Shell(shell, SWT.NO_TRIM);
transparentShell.setAlpha(120);
transparentShell.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
transparentShell.setBounds(shell.getBounds());
AlphaEffect.fadeOnClose(transparentShell, 900, new ExpoOut(), animationRunner);
transparentShell.open();
AlphaEffect.setAlpha(animationRunner, transparentShell, 160, 900, new ExpoOut(), null, null);
}
我使用的是swt-3.7-2和gtk-3.2.0
Linux中需要什么来提高透明度?必须为其安装哪些组件/库/包
“透明度效应”起作用了吗
编辑:经过数小时的谷歌搜索,我找到了解决方案,我只是在java程序之前启动Kwin:
kwin&
cd /home/user
java -jar ./program.jar
唯一的问题是than Kwin相当大,有很多依赖性。我必须在256MB内存的计算机上运行我的程序,所以也许有人知道一种更轻的窗口管理器,它支持透明性,并将以与Kwin相同的方式与SWT一起工作?我终于找到了解决问题的方法。也许这对其他人会有帮助。linux中的SWT使用cairo绘制透明效果,需要以下库:
libswt-cairo-gtk-3-jni
libcairo2
libxcomposite1
libxdamage1
必须加载以下XOrg扩展:
Composite
DAMAGE
GDK要求合成窗口以绘制透明度,所以我需要使用窗口管理器。KWin太重了,我改用xfwm4。xfwm4具有必须启用的内置合成器。要在xfwm4中启用合成,只需编辑属性文件:
~/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml
并设置:
<property name="use_compositing" type="bool" value="true"/>