透明背景模糊的 JFrame

2023-12-02

我想对 JFrame 的背景进行模糊处理,该背景是透明的以显示其下方发生的情况,但我不知道如何模糊背景并避免闪烁。我想要实现的是拥有一个稍微模糊的透明背景,但仍然显示其下方窗口的“实时视图”,而不是拥有不改变的模糊静态图片。 请记住,窗口可能会占据全屏大小。

我希望我的描述是正确的,因为我仍然是 Java 图形的初学者。

代码中的透明框:

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;

public class BlurredBackgroundWindow {

    public static void main(String[] args) {
        new BlurredBackgroundWindow().drawGUI();
    }

    public void drawGUI() {
        myJFrame frm = new myJFrame();
        frm.setTitle("BlurredBackgroundWindow");
        frm.setSize(480, 360);
        frm.setUndecorated(true);
        frm.setBackground(new Color(0,0,0,1));
        frm.setLocationRelativeTo(null);
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frm.setVisible(true);
    }

    class myJFrame extends JFrame {

        public void paint(Graphics g) {
            super.paint(g);

            // Doing the rest of painting here
        }

    }

}

注意 - 框架是完全透明的,要看到一些效果,请将颜色更改为例如。

frm.setBackground(new Color(0,100,0,100));

谢谢你的帮助

编辑1: 这是我想避免的闪烁效果,但我真的不知道如何......这个仅适用于全屏窗口。

import java.awt.AWTException;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JFrame;

public class BlurredBackgroundWindow {

    public static int FPS = 2;
    private BufferedImage temp = null;
    private BufferedImage out = null;
    private BufferedImage image = null;

    myJFrame frm = new myJFrame();

    public static void main(String[] args) {
        new BlurredBackgroundWindow().drawGUI();
    }

    public void drawGUI() {
        frm.setTitle("BlurredBackgroundWindow");
        frm.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frm.setUndecorated(true);
        frm.setBackground(new Color(0,0,0,1));
        frm.setLocationRelativeTo(null);
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frm.setVisible(true);

        Timer bcg = new Timer();
        bcg.schedule(new TimerTask() {

            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            Rectangle screenRectangle = new Rectangle(screenSize);
            Robot robot;

            public void run() {

                System.out.println("Repaint");
                frm.repaint();
                try {
                    robot = new Robot();
                    image = robot.createScreenCapture(screenRectangle);
                } catch (AWTException e) {}
                frm.repaint();
                // Save the blurred image for debugging
                /*try {
                    ImageIO.write(image, "png", new File("C:\\test.png"));
                } catch (IOException e) {
                    e.printStackTrace();
                }*/

            }

        }, 0, (int) (1000f/FPS));
    }

    class myJFrame extends JFrame {

        public void paint(Graphics g) {
            super.paint(g);

            if(image != null) {
                   float[] matrix = {
                            0.111f, 0.111f, 0.111f, 
                            0.111f, 0.111f, 0.111f, 
                            0.111f, 0.111f, 0.111f, 
                        };
                        BufferedImageOp op = new ConvolveOp( new Kernel(3, 3, matrix) );
                        temp = op.filter(image, out);
                        out = temp;
                g.drawImage(out,0,0,null);
                temp=null;out=null;image=null;
            }

        }

    }

}

您可以非常轻松地做到这一点,并且有多种方法。以下是如何做到这一点的示例代码。

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsDevice;
import java.awt.GraphicsDevice.WindowTranslucency;
import java.awt.GraphicsEnvironment;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;


public class transparentWindow extends JFrame {

public transparentWindow() {
    // TODO Auto-generated constructor stub
    //JFrame jfrm=new JFrame("Transparent Window");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(300,200);
    getContentPane().setLayout(new FlowLayout());
    //setBackground(new Color(0,0,0,0));

    add(new JButton("Enter"));
    setOpacity(0.7f);
    setVisible(true);
}
public static void main(String[] args) {
    // TODO Auto-generated method stub
    GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice gd=ge.getDefaultScreenDevice();
    if(!gd.isWindowTranslucencySupported(WindowTranslucency.TRANSLUCENT))
    {
        System.out.println("Transparency not supported");
        System.exit(0);
    }
    JFrame.setDefaultLookAndFeelDecorated(true);
    SwingUtilities.invokeLater(new Runnable(){public void run(){new transparentWindow();}});
}

}

有了这个,您甚至可以通过它观看实时视频。您也可以调整透明度级别。输出如下:-

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

透明背景模糊的 JFrame 的相关文章

随机推荐

  • x64 系统上的 win32 应用程序编译 0K 时出现运行时错误(dll 加载)

    我最初在win7 32位上设计了一个win32应用程序 使用VC9 0 我最近升级到win7 64位 并尝试构建 执行以前的应用程序 构建运行良好 win32 应用程序 但在运行时我收到错误 已退出 代码为 1073741701 0xc00
  • 决赛桌的合并相当于什么?

    我正在尝试使用合并来仅插入新记录 我想收集插入的新记录的 ID 以及被忽略的重复记录的 ID 这是表的创建语句 drop table SSZ ME MIS test update table create table ssz me mis
  • 如何将 TabBarView 上的滚动条“合并”到 PageView 中?

    我有一个在其主页上使用 PageView 的应用程序 今天 我被分配在其中一个页面中插入 TabBarView 问题是 当我在最后一个选项卡中滚动选项卡之间时 向左滚动将不会滚动 PageView 我需要一种方法来使页面视图在选项卡视图的开
  • 如何使用java自动从日历中选择特定日期

    我有一个案例 我必须从日历中选择 3 天回溯的日期 如何使用 selenium 自动化此案例 我正在使用 java 和 selenium 进行自动化 1 假设您可以在输入字段中写入日期 并且日历只是图标 你可以有这样的辅助方法 public
  • 如何在提交事件处理程序中获取表单值?

    我试图开始使用一个非常简单的 Google 表单 其中仅包含几个问题 只有 2 个选项和一个简短文本的多项选择 创建后 我打开脚本编辑器并输入 function onSubmit e Logger log onSubmit s JSON s
  • WP7 (Windows Phone 7) 在 XAML 或 C# 中锁定手机方向

    Windows Phone 7 是否可以手动锁定手机方向 因为我使用加速度计来处理具有固定 UI 的按钮旋转 我已经尝试过了 在 XAML 中 SupportedOrientations Landscape Orientation Land
  • 将 simple-prefs (SDK API) 与外部脚本和 postMessage 一起使用

    我正在使用 SDK 开发附加组件的新版本 针对 Gmail 并且需要为我的用户存储一些布尔首选项 为此 我想使用新的 simple prefs API 基于Mozilla 文档和这个堆栈溢出问题 我得到了一些东西 但我面临以下问题 1 我无
  • 是否可以在 vscode 中将您的代码分为 R 部分?

    有没有办法使用类似于 RStudio 的代码部分 或 MATLAB 的 在 VSCode 中 我想将我的代码分为几个部分并有选择地运行这些部分 那可能吗 Thanks Yasir 我认为您正在了解一些不同的事情 如果您想划分代码并像 jup
  • 在 R 中索引冗余命名的向量

    在 R 中 当有一个冗余命名向量时 为什么无法使用选择运算符检索命名向量中的所有元素 v lt c 1 2 3 4 5 names v lt c a b c c a v c Returns only 3 not c 3 4 看起来 R 假设
  • webGL单帧“截图”

    尝试寻找类似的东西 但我没有运气 我正在尝试打开一个新选项卡 其中包含 webgl 图像当前状态的屏幕截图 基本上 它是一个 3D 模型 能够更改显示的对象 这些对象的颜色以及背景颜色 目前 我正在使用以下内容 var screenShot
  • E*Trade API 在获取访问令牌时经常返回 HTTP 401 Unauthorized,但并非总是如此

    Summary 我编写了一个简单的 C NET Core 应用程序 使用 OAuthv1 对 E Trade API 进行身份验证 目的是获取股票报价 我能够进行身份验证并获取请求令牌 重定向到授权页面并获取验证程序字符串 但是 当我使用验
  • 通过 Zip Google Geocode Api 查找城市和州 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我基本上想检索邮政编码内的城市和州列表 Google Geocode API 可以这样做吗 我尝试查看文档 但发现信息过多 任何帮助 将不胜感激 如
  • 使用 C 访问 Twitter Streaming API

    我正在尝试使用 C 访问 Streaming API 并使用以下代码 include
  • 在 Windows 服务 C# 中引发自定义类事件

    我确实编写了一个可以使用 dll 连接到网络设备的 Windows 服务 所以一切正常 但是事件处理程序在 win 服务中不起作用 这是我的代码 我的自定义类代码 using System using System Collections
  • 浏览器之间的颜色(颜色)差异?

    我刚刚注意到我正在处理的一个网站在 Chrome 中看起来与其他浏览器 saf ff 不同 Chrome 中的所有内容都更加饱和 甚至是背景色 rgb 我不知道是什么导致了这种情况发生 不能与 img 颜色配置文件有任何关系 否则 rgb
  • 在 Swift 中创建一个接受本机 Swift 协议的弱容器

    这是 Swift 中的标准样板弱容器 struct Weak
  • 为每条记录保存带有新行的 R JSON 对象

    我正在尝试保存一个 JSON 对象 其中每一行都是一条记录 如何保存 JSON 对象以使行数等于记录数 在下面的示例中为 5 library jsonlite df mtcars 1 5 x lt jsonlite toJSON df re
  • 什么是投影和选择?

    投影和选择有什么区别 是吗 投影 gt 用于选择表的列 和 选择 gt 选择表的行 那么投影和选择分别是垂直和水平切片吗 Exactly 投影意味着选择哪些列 或表达式 查询应返回 选择 means 哪些行将被退回 如果查询是 select
  • 如何让物体沿圆弧路径运动?

    我正在制作一个游戏 其中应该有一个机器人向另一个机器人扔球形物体 投出的球应以对称的弧线飞行 很确定这个数学词是抛物线 两个机器人都在 x 轴上 我怎样才能在我的游戏中实现这样的事情 我尝试了不同的方法 但没有一个有效 我的游戏中当前移动物
  • 透明背景模糊的 JFrame

    我想对 JFrame 的背景进行模糊处理 该背景是透明的以显示其下方发生的情况 但我不知道如何模糊背景并避免闪烁 我想要实现的是拥有一个稍微模糊的透明背景 但仍然显示其下方窗口的 实时视图 而不是拥有不改变的模糊静态图片 请记住 窗口可能会