Java 如何使用透明模糊背景的JFrame
我只是想知道是否有办法使Java 如何使用透明模糊背景的JFrame,java,swing,background,jframe,Java,Swing,Background,Jframe,我只是想知道是否有办法使JFrame的背景模糊。有点像iOS效应 在Java中可能吗? 我在Windows和Mac上需要它。我已经断断续续地做了一段时间,但从来没有得到任何令人满意的结果。为什么?因为为了让它工作,你需要使窗户透明(实际上是半透明的),但是当使用原生的外观装饰时,窗户必须没有装饰才能工作 注:这利用了原因当我开始做这类事情时,JNA还处于婴儿期 以及dwmblurbhind类 import com.jniwrapper.Int; import com.jniwrapper.Pa
JFrame
的背景模糊。有点像iOS效应
在Java中可能吗?
我在Windows和Mac上需要它。我已经断断续续地做了一段时间,但从来没有得到任何令人满意的结果。为什么?因为为了让它工作,你需要使窗户透明(实际上是半透明的),但是当使用原生的外观装饰时,窗户必须没有装饰才能工作 注:这利用了原因当我开始做这类事情时,JNA还处于婴儿期 以及
dwmblurbhind
类
import com.jniwrapper.Int;
import com.jniwrapper.Parameter;
import com.jniwrapper.Pointer;
import com.jniwrapper.Structure;
import com.jniwrapper.UInt32;
import windows.WinDef;
public class DWMBlurBehind extends Structure {
public static final int DWM_BB_ENABLED = 0x1;
public static final int DWM_BB_BLURREGION = 0x2;
public static final int DWM_BB_TRANSITIONONMAXIMIZED = 0x4;
private UInt32 dwFlags;
private Int enabled;
private Pointer.Void region;
private Int transitionOnMazimized;
public DWMBlurBehind() {
dwFlags = new UInt32(DWM_BB_ENABLED);
enabled = new Int(WinDef.TRUE);
transitionOnMazimized = new Int(WinDef.TRUE);
region = new Pointer.Void();
init(new Parameter[]
{
dwFlags,
enabled,
region,
transitionOnMazimized
});
}
public long getFlags() {
return dwFlags.getValue();
}
}
现在,说到这里,如果你不关心使用本机外观的UI,你可以创建一个装饰框架(使用外观装饰),作为@gtgaxiola的可能副本。在我发布问题之前,我已经看过了那篇文章。如果你仔细阅读我的问题,我想添加模糊效果,而不在背景中添加任何图像。但你提到的帖子是为了修复特定组件并使背景图像模糊。一般来说,不。你“可能”可以使用JNI/JNA来完成,但随后你会遇到一系列新问题,因为核心api是为处理这些问题而设计的……对于windows,你必须查看和api,不能说你需要为MacOS看什么
import com.jniwrapper.Int;
import com.jniwrapper.Parameter;
import com.jniwrapper.Pointer;
import com.jniwrapper.Structure;
import com.jniwrapper.UInt32;
import windows.WinDef;
public class DWMBlurBehind extends Structure {
public static final int DWM_BB_ENABLED = 0x1;
public static final int DWM_BB_BLURREGION = 0x2;
public static final int DWM_BB_TRANSITIONONMAXIMIZED = 0x4;
private UInt32 dwFlags;
private Int enabled;
private Pointer.Void region;
private Int transitionOnMazimized;
public DWMBlurBehind() {
dwFlags = new UInt32(DWM_BB_ENABLED);
enabled = new Int(WinDef.TRUE);
transitionOnMazimized = new Int(WinDef.TRUE);
region = new Pointer.Void();
init(new Parameter[]
{
dwFlags,
enabled,
region,
transitionOnMazimized
});
}
public long getFlags() {
return dwFlags.getValue();
}
}