一、介绍

最近发现桌面上显示的透明图片和动态图片看起来不错,于是研究了一下java能否做到这一点。使用JFrame基本是可以实现的,但是还有些缺陷。其中,核心语句是

jframe.setBackground(new Color(0,0,0,0));
jPanel.setBackground(new Color(0,0,0,0));

这两句都写上,才能实现透明图片的效果。

//网上说这句也可以:AWTUtilities.setWindowOpaque(frame, false);
//不过我加上不行,是jdk1.8不支持吗?还是win10下不支持呢?

直接上截图与代码了:

1.透明图片:

2.动态图片(gif):

3.有问题的动态图片(本来应该是雪花效果的,要不不透明,要不就长这样,不会调了):

二、代码

1.透明图片

import java.awt.*;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;public class noBankImg {public static void main(String[] args) {new noBankImg();}public noBankImg(){start();}public static void start() {final JFrame frame = new JFrame();//设置在最顶层frame.setAlwaysOnTop(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置隐藏标题栏与无法移动frame.setUndecorated(true);//禁止改变大小frame.setResizable(false);//设置出现位置frame.setLocation(frame.getToolkit().getScreenSize().width-300, frame.getToolkit().getScreenSize().height-350);//设置大小frame.setSize(300, 300);//这句不能用,无效,不兼容//AWTUtilities.setWindowOpaque(frame, false);//设置背景透明frame.setBackground(new Color(0,0,0,0));final JPanel pane = new JPanel() {@Overridepublic void paint(Graphics g) {super.paint(g);Graphics2D g2d = (Graphics2D) g;InputStream imgIS = this.getClass().getResourceAsStream("t3.png");Image image = null;try {image = ImageIO.read(imgIS);} catch (IOException e) {e.printStackTrace();}g2d.drawImage(image, 0, 0,300,300, null);}};//设置背景透明pane.setBackground(new Color(0,0,0,0));frame.setContentPane(pane);//设置完毕后再显示frame.setVisible(true);}
}

2.动态图片(图片原本是gif的,不过重命名成jpg也不影响)

import java.awt.*;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;//动图public class t1 extends JFrame {public t1() {setDefaultCloseOperation(EXIT_ON_CLOSE);setLocationRelativeTo(null);setSize(400, 300);//设置在最顶层setAlwaysOnTop(true);//设置出现位置setLocation(getToolkit().getScreenSize().width-400, getToolkit().getScreenSize().height-350);//设置隐藏标题栏与无法移动setUndecorated(true);//禁止改变大小setResizable(false);getContentPane().setLayout(null);JPanel panel = new ImagePanel();panel.setBounds(0, 0, 400, 300);//设置背景透明setBackground(new Color(0,0,0,0));//panel.setBackground(new Color(0,0,0,0));getContentPane().add(panel);setVisible(true);}public static void main(String[] args) {new t1();}class ImagePanel extends JPanel {public void paint(Graphics g) {super.paint(g);ImageIcon icon = new ImageIcon(this.getClass().getResource("t5.jpg"));g.drawImage(icon.getImage(), 0, 0, 400, 300, this);}}
}

3.有问题的动态图片

import com.sun.awt.AWTUtilities;import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.IOException;
import java.io.InputStream;//pane.setBackground(new Color(0,0,0,0));
//AWTUtilities.setWindowOpaque(frame, false);public class t3 {public static void main(String[] args) {new t3();}public t3(){start();}public static void start() {final JFrame frame = new JFrame();frame.setAlwaysOnTop(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setUndecorated(true);frame.setExtendedState(JFrame.MAXIMIZED_BOTH);//这句不能用,无效,不兼容//AWTUtilities.setWindowOpaque(frame, false);frame.setBackground(new Color(0,0,0,0));final JPanel pane = new JPanel() {private int[] snowX = null;private int[] snowY = null;private int[] angles = null;private int count = 50;@Overridepublic void paint(Graphics g) {super.paint(g);Rectangle bounds = frame.getBounds();if (snowX == null) {snowX = new int[count];for (int i = 0; i < snowX.length; i++) {snowX[i] = getRandomInt(bounds.width);}snowY = new int[count];for (int i = 0; i < snowY.length; i++) {snowY[i] = getRandomInt(bounds.height);}angles = new int[count];for (int i = 0; i < snowY.length; i++) {angles[i] = getRandomInt(360);}}Graphics2D g2d = (Graphics2D) g;InputStream imgIS = this.getClass().getResourceAsStream("t3.png");Image image = null;try {image = ImageIO.read(imgIS);} catch (IOException e) {e.printStackTrace();}for (int i = 0; i < count; i++) {snowX[i] += getRandomInt(5) - 3;snowY[i] += 5;angles[i] += i / 5;snowY[i] = snowY[i] > bounds.height ? 0 : snowY[i];angles[i] = angles[i] > 360 ? 0 : angles[i];int x = snowX[i];int y = snowY[i];int angle = angles[i];g2d.translate(x, y);double angleValue = Math.toRadians(angle);g2d.rotate(angleValue);g2d.drawImage(image, 0, 0, null);g2d.rotate(-angleValue);g2d.translate(-x, -y);}}};//设置透明背景pane.setBackground(new Color(0,0,0,0));frame.setContentPane(pane);frame.setVisible(true);Thread thread = new Thread() {@Overridepublic void run() {while (true) {try {Thread.sleep(10);} catch (Exception ex) {ex.printStackTrace();}pane.repaint();}}};thread.start();}public static int getRandomInt(int width) {int i = 0;double d = Math.random() * width;i = (int)d;return i;}
}

三、说明

以上代码可以直接使用。

有问题的动态图片的代码,还请大佬看看怎么优化;要不实现不了透明效果,要不就是那样,有重叠,很尴尬。

JFrame显示透明图片与动态图片相关推荐

  1. android 怎么播放gif图片不显示,android 播放gif动态图片

    android不推荐使用gif图片,一般都是png的,对于gif的图片解析比较消耗资源,但是对于一些动态gif图片的播放,如果比较小的话还是可以的,要是大的话,建议还是把gif图片转换成一帧一帧的pn ...

  2. 如何html中添加动态图片,把动态图片添加到视频画面中 视频添加自定义动态图片 视频加动态logo...

    我前面也编写过关于视频添加动态图片的教程.前面所说的给是视频添加的动态图片是软件中自带的素材,虽然软件中带的动态图片种类繁多,但是不外乎有些时候软件中并没有我们要用的动态图片,这个时候我们就需要重外部 ...

  3. C#实现基于Logistic映射混沌加密算法(可加密静态图片和动态图片)

    这是本菜鸡在<信息隐藏>中实现的图像加密,选用的是logistics混沌加密算法,希望对你的课设或项目有所帮助 文章目录 基于Logistic映射混沌加密算法 逻辑斯蒂(Logistic) ...

  4. 如何把静态图片做成动态图片?学会这一招让图片动起来

    怎样将静态的图片变成动态的gif图片呢?很简单,使用[GIF中文网]的gif制作(https://www.gif.cn/)功能,上传两张及以上的jpg.png格式图片,轻轻一键就能在线制作GIF图片, ...

  5. cocos creator 3.x 精灵不显示、加载动态图片、物理碰撞、人物跟随鼠标移动、碰撞后节点销毁

    温馨提醒:即刻转去Unity3d 精灵不显示: 不要在空节点下直接添加组件 正确的做法是:在空节点(Node)上右键创建一个精灵才会给看到 或者直接拖曳一个图片放到场景编辑器中也可 cocos cre ...

  6. Android 显示和控制gif动态图片的播放

    加载和控制gif动态显示和播放控制.使用第三方库,加载和控制都非常简单.这里有对播放的控制有两种情况,一是直接控制播放(按钮),和使用MediaPlayerControl控制.github上放了一个例 ...

  7. 让ChatGPT显示图片和动态GIF图

    在默认情况下:使用ChatGPT生成图片,得到的结果只有文字,无法生成图片. 目录 示例: 静态图片: 动态图片: 一.先输入一句话,后面输入xxx的gif都会给出gif图片 二.获取所需GIF 示例 ...

  8. java jframe显示图片_java怎么在JFrame中显示动态图片

    java怎么在JFrame中显示动态图片 (2012-09-16 23:39:54) 标签: 杂谈 import java.awt.Graphics; import javax.swing.Image ...

  9. Qt 编程指南 8 显示静态小图片和动态大图片

    显示控件概览 图片浏览示例 第一行是一个标签控件,objectName 为 labelShow,文本内容清空,因为是用来显示图片用的. 主界面第二行的控件是四个普通按钮 第一个按钮文本是 " ...

  10. java实现gif动画效果(java显示动态图片)

    关闭 关闭 脚本之家 软件下载 源码下载 在线工具 网页教程基础 服务器常用软件 手机版 关注微信 网页制作 网络编程 脚本专栏 脚本下载 数据库 CMS教程 电子书籍 平面设计 媒体动画 操作系统 ...

最新文章

  1. zabbix自动化监控8(2.4)
  2. XP+UBUNTU双系统上重装XP后修复GRUB方法
  3. RPAD()和LPAD()函数进行字符串的填充
  4. 4-什么是Image和container
  5. 腾讯广告算法大赛 | 复赛第二周最佳进步奖得主心得分享
  6. IT人都是技术宅?NO,他们完全刷新了我们的认知
  7. MyEclipse2014安装aptana插件
  8. P1809 过河问题_NOI导刊2011提高(01)
  9. apache php的权限,Unix上的Apache PHP写权限
  10. 51单片机c语言100例百度云,51单片机C语言编程100例.docx
  11. 虚拟机如何安装Deepin系统
  12. 干货 | 红队小技巧
  13. dlang语法的简单整理
  14. 魅族16t无法点击计算机传输,魅族16T如何打开USB调试模式连接电脑 魅族16T一键开启游戏模式方法教程...
  15. 使用篇十 --- 模板代码创建
  16. graphpad prism横坐标怎么设置不显示数值_Graphpad Prism 的 4 个隐藏技能助你轻松发表 SCI...
  17. 阿里达摩院开源DAMO-YOLO:兼顾速度与精度的新目标检测框架
  18. matlab 双音频信号的检测,双音频(DTMF)信号的产生与检测.doc
  19. B. All the Vowels Please
  20. 能在html中打开ppt吗,怎样在PPT中直接打开网页

热门文章

  1. 图像处理:RGB565转RGB888
  2. 集合经验模态分解matlab,matlab集合经验模态分解EEMD工具包
  3. 360竞价开户推广,让营销更聪明!
  4. oracle分页优化
  5. python共享单车数据分析_共享单车数据可视化分析(Python/Seaborn)
  6. 怎么计算机械需要的电机,比方说一个90kw的电机它的最大电流应该是多少?应该用多少平方的铜线?怎么计算呀?...
  7. i350在linux系统刷MAC,MAC 10.14 安装教程10-基于黑果小兵大神EFI文件的修改过程
  8. 部分pcie网卡睡眠之后不能识别的问题
  9. 自学人工智能 日记2017, ,搞定了
  10. Python爬虫之七:爬虫实战-爬取豆瓣电影 top 250