java创建以任意图片为背景的窗口

2023-11-01

swing自带的窗体是不能够满足我们的应用需求的,所以需要制作任意图片和形状的JFrame框体,比如下图:

并且可以设置窗体背景图片的透明度

下面说明如何做到上图的效果:

(1)首先你得需要一张好看的图片,比如羊皮纸。但是这个下载的图片是方方正正的矩形,羊皮纸的形状在图片的内部,所以我们用美图秀秀或者PS中的抠图功能将羊皮纸抠出来,如下:


(2)将图片保存为透明背景即可。

(3)接着写一个myJFrame继承JFrame,代码如下:

import com.sun.awt.AWTUtilities;
import javax.swing.*;
import java.awt.*;
public class myJFrame extends JFrame{
    private float alpha;
        public myJFrame(String bgPath,float alpha){
            super();
            myContentPane rp = new myContentPane(bgPath);
            rp.setOpaque(false);//设置内容面板为透明
            this.setContentPane(rp);
            this.setUndecorated(true);
            this.setSize(rp.img.getIconWidth(),rp.img.getIconHeight());
            AWTUtilities.setWindowOpaque(this, false);//设置为JFrame为透明
            this.alpha = alpha;
        }
    private class myContentPane extends JPanel{
        public ImageIcon img;
        public myContentPane(String bgPath) {
            super();
            img = new ImageIcon(Test.class.getResource(bgPath));
        }
        @Override
        protected void paintComponent(Graphics g) {
            AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);
            Composite old = ((Graphics2D) g).getComposite();
            ((Graphics2D) g).setComposite(ac);
            if(img!=null){
                g.drawImage(img.getImage(), 0, 0, getWidth(), getHeight(), this);
            }
            ((Graphics2D) g).setComposite(old);
            super.paintComponent(g);
        }
    }
}


上面的程序主要代码在于:设置JFrame为透明,JFrame去掉边框,设置内容面板为透明,然后将图片画到内容面板上。

(4)写一个测试类Test:

import javax.swing.*;
import java.awt.*;
public class Test {
    public static void main(String[] args) {
        /**
         * 设置背景图和背景图的透明度,0为全透明,1.0f为不透明。
         */
        myJFrame f = new myJFrame("ab.png",0.7f);

        f.setLayout(null);
        Font font = new Font("宋体",Font.PLAIN,30);
        JLabel user = new JLabel("用户名");
        user.setFont(font);
        user.setBounds(100,150,100,30);
        JTextField userInput = new JTextField();
        userInput.setFont(font);
        userInput.setBounds(200,145,250,40);
        JLabel ps = new JLabel("密码");
        ps.setFont(font);
        ps.setBounds(110,200,90,30);
        JTextField psInput = new JTextField();
        psInput.setFont(font);
        psInput.setBounds(200,195,250,40);

        f.add(user);
        f.add(userInput);
        f.add(ps);
        f.add(psInput);
        f.setLocation(300,100);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}


(5)由于去掉了边框,所以窗体不能拖动和拉伸,拖动和拉伸功能的实现见这篇文章swing实现窗体拖拽和拉伸

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

java创建以任意图片为背景的窗口 的相关文章

  • JList 随机抛出 ArrayIndexOutOfBoundsExceptions

    我正在尝试异步将项目添加到 JList 但我经常从另一个线程收到异常 例如 Exception in thread AWT EventQueue 0 java lang ArrayIndexOutOfBoundsException 8 有谁
  • 在 JTable 中使用自定义 TablecellRenderer

    我是 Java 新手 我创建了一个JTable 就是这样addRow当我尝试向表中添加一行时 该方法有效 private void addTableRow String type String name String rank String
  • 如何用 Java 制作 Windows 7 工具提示

    我一直在网上到处寻找 但没有找到这个小问题的答案 在 Windows 7 中 我认为在 Vista 中 您有一个漂亮的圆形银色工具提示 它看起来比旧的黄色盒装蹩脚工具提示要好得多 下面的 How do I make a Windows 7
  • JTable AutoCreateRowSorter 将数字排序为字符串

    我有一个 JTable JTable table new JTable String colNames c1 DefaultTableModel model new DefaultTableModel Integer x new Integ
  • 更改 Swing 组件的首选大小

    我有一个摆动组件 该组件的理想尺寸将因内容而异当前正在显示 在本例中恰好是图像 我希望在内容更改时更改此首选大小 并且还允许更改布局 例如 如果在 JScrollPane 内使用组件 则滚动范围将更改以适应组件的大小 在 Swing 中执行
  • 如何让JPanel可滚动?

    我正在为我的大学项目创建 GUI 我试图了解如何JScrollPane works 我已经成功编写了简单的程序 以可滚动的方式显示图片 public class ScrollPaneTest public static void main
  • 如何在netbeans(Java Swing)中查看同一JFrame中包含许多子jPanel的另一个jPanel

    我想通过按钮事件操作显示另一个 jPanel 例如 private void jButtonMouseClicked MouseEvent e getContentPane removeAll update getGraphics code
  • 在 JButton 上显示 Unicode 字符

    我正在尝试显示这个 Unicode uD83D on a JButton文本 但当我编译时 它只显示未知字符的平方 托马斯给出了一个很好的答案 但请注意 为了避免猜测哪些已安装的字体支持字符或字符串 我们可以迭代可用的字体并使用canDis
  • 如何在 Java 中使 JFrame 可滚动?

    我有这段代码 我试图在其中安装可滚动面板 JPanel 但我不明白 这是我的代码 public class Sniffer GUI extends JFrame Canvas c new Canvas ConnectorProperties
  • Windows 7 触摸屏 + Java Swing = 延迟鼠标事件

    我正在用 Java 开发一个 Swing 应用程序 该程序将在专用的 Windows 7 触摸屏机器上运行 据我所知 该程序应该是在正常操作下唯一在其上运行的程序 我注意到 Windows 7 的触摸屏界面有一个可以阻止 mousedown
  • 将 Java2SAutoTextField 实现为 JtextField

    1 我能够添加一个JTextField to the JFrame 我初始化了该类Java2sAutoTextField http www java2s com Code Java Swing JFC AutocompleteTextFie
  • Java swing:为 JComboBox 实现我的 Combobox 模型

    我需要我的组合框包含组织的简称 问题是我can在下拉列表中查看组织名称 但是cant实际上选择它 我的错误在哪里 public class ToComboBoxModel extends AbstractListModel implemen
  • 多个事件分派线程

    我是 Java Swing 新手 我的问题与事件队列和调度线程相关 我读到可以有多个事件队列 每个队列应用上下文 http www java2s com Open Source Java Document 6 0 JDK Modules s
  • 将 JFrame 大小调整为 JLayeredPane 内的 JPanel

    我正在使用 Swing GUI 进行工作JLayeredPane The JFrame has a JLayeredPane其中包含两个JPanels 稍后我想在中显示一些组件JPanels 我删除了这部分代码以使其更短 如何调整大小JFr
  • 如何在 Graphics2D 中制作像素完美的 Line2D

    你好 我有 JPanel 上面有一些 Line2D 对象 问题是当我画这条线时 它并没有按照我想要的方式显示 线条不流畅 很难用文字解释 所以我发布了一张图片 缩放区域 如何让它们看起来更光滑而不是有皱纹 Thanks 问题可能是您的图形上
  • JFrame 中的 JavaFX 菜单

    我想在 JFrame 中使用 JavaFX 菜单 我使用 JFXPanel 嵌入它 并且它在 JFrame 中可见 但是 问题是 菜单项不响应鼠标 我可以单击菜单 但不能单击菜单项 如果我使用键盘选择 MenuItem 并按 Enter 键
  • Java 控制台 JPanel

    你好 是否可以在 JPanel 中绘制 java 控制台返回的内容 你有教程可以遵循吗 谢谢 SW 我不记得在哪里找到这个 但我已使用我称为 TextAreaOutputStream 的类将输出流输出到 JPanel 中保存的 JTextA
  • JTree ConvertValueToText 返回在更改时被截断

    我有一个自定义树实现convertValueToText 此实现取决于某些全局状态 如果返回的字符串比先前返回的字符串更长 实际上我认为更宽 因为以像素为单位触发它 则文本将被截断并用 填充 当重绘是由 取消 选择元素或某个元素引起时 情况
  • 背景图像隐藏其他组件,例如按钮标签等,反之亦然

    如何解决此代码中组件的隐藏问题 代码运行没有错误 但背景图片不显示 如何更改代码以获取背景图像 使用验证方法时 它在validation 中创建错误 public class TEST public TEST String strm Jan
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个

随机推荐

  • error : [QtRunWork] Error starting process C:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin\uic.exe: 系统找不到指定的文件

    工程环境Qt5 14 2 VS2019 项目工程从A电脑拷贝到B电脑出现 Error starting process C Qt Qt5 14 2 5 14 2 msvc2017 64 bin uic exe 系统找不到指定的文件 问题分析
  • struts2与spring整合

    struts2与spring整合 struts2与spring整合目的 是为了让struts2的action由容器管理 1 在web xml中配置spring的监听器 直接拷贝过来就行 不需要会 2 加一个jar包 struts2 spri
  • 快手首次透露商业化布局:将重点发力短视频广告

    雷帝网 雷建平 10月24日报道 快手的商业化进程一直颇受关注 据官方最新表态显示 快手商业化进入新阶段 今日 在快手以广告为主题的媒体沟通活动上 快手公司创始人兼CEO宿华专门发来一段话 经过一年多摸索 快手商业化提速 即将推出快手营销平
  • C#读写参数到APP.Config

    C 读写参数到APP Config 介绍 程序Demo 常见错误 介绍 系统在开发时 可能需要设置默认参数 比如数据库的链接参数 某个参数的默认数据等等 对于这些数据 可直接在app config中读取 在读写时 需要先了解configur
  • SpringBoot项目编译报错 “类文件具有错误的版本 61.0, 应为 52.0”

    springboot项目在编译时报错 INFO maven compiler plugin 3 10 1 compile default compile gulimall coupon INFO Changes detected recom
  • Web容器自动对HTTP请求中参数进行URLDecode处理

    如题 在Java中也许很多人都没有注意到当我们发送一个http请求给时 如果附带的参数被URLEncode之后 到达web容器之后 开发者获取到的参数值会自动变成了encode之前的值 这是一个很好的特点 开发者完全可以忽略http的参数是
  • SQL函数之聚合函数(求和,平均值,最大值,最小值,统计,取不重,取重)

    聚合函数 聚合函数对一组值进行计算并返回单一的值 通常聚合函数会与SELECT语句的GROUP BY子句一同使用 在与GROUP BY子句使用时 聚合函数会为每一个组产生一个单一值 而不会为整个表产生一个单一值 在这张数据表的基础上执行语句
  • Stable Diffusion WebUI部署过程踩坑记录

    概述 AI绘画十分火爆 博主最近在本地部署Stable Diffusion的时候遇到了一点问题 在查找解决办法的时候也是找了好几个不同的回答 但感觉都不全面 特在此记录一下自己遇到的问题 问题 Couldn t install gfpgan
  • 今晚8点直播

    近年来 聊天机器人技术及产品得到了快速的发展 聊天机器人作为人工智能技术的杀手级应用 发展得如火如荼 各种智能硬件层出不穷 本次公开课中 AI科技大本营联合电子工业出版社博文视点邀请到上海瓦歌智能科技有限公司总经理 狗尾草科技人工智能研究院
  • Sqlite如何修改表结构字段类型

    转自 Sqlite如何修改表结构字段类型 百度经验 baidu com SQLite 仅仅支持 ALTER TABLE 语句的一部分功能 我们可以用 ALTER TABLE 语句来更改一个表的名字 也可向表中增加一个字段 列 但是我们不能删
  • Java图书管理系统,课程设计必用(源码+文档)

    前提导入 高校图书馆是图书借阅的场所 它支撑着学校教学 科研等多项工作的开展 在高校中占有重要的位置 本文以高校图书馆的实际工作需求为导向 研发了一个能够满足图书管理人员和读者使用需求的图书管理系统 本系统采用Java MySQL 作为系统
  • 电容电感自谐振

    电感电容自谐振 MuRata 0603 仿真范围为0 30GHz 一 电感自谐振 二 电容自谐振 以上是利用ADS对muRata的实际电感电容自谐振的实验结果 该结果是根据阻抗幅度值得到的 其与S21显示的结果稍微有频偏 但能对应上 扼流电
  • springboot配置访问sqlserver,mysql数据库以及ssm的公共业务逻辑层抽取

    springboot的搭建 http blog csdn net goligory article details 78404480 最近喜欢用springboot 有时间就研究了一下 因为经常用sqlserver 在网上查了半天没有什么很
  • 【深度学习】Pytorch 系列教程(十一):PyTorch数据结构:3、变量(Variable)介绍

    目录 一 前言 二 实验环境 三 PyTorch数据结构 0 分类 1 张量 Tensor 2 张量操作 Tensor Operations 3 变量 Variable 一 前言 ChatGPT PyTorch是一个开源的机器学习框架 广泛
  • java web实验2客户端综合编程

    一 实验目的与要求 简述本次实验要求达到的目的 涉及到的相关知识点 实验的具体要求 1 实验目的 1 编写HTML网页 掌握HTML表单 表格等常用标签的使用 掌握CSS的语法和应用 2 编写JavaScript代码 熟悉并掌握JavaSc
  • ctk插件框架异常:The service interface class has no Q_DECLARE_INTERFACE macro

    ctk插件框架异常 The service interface class has no Q DECLARE INTERFACE macro 前言 当调试ctkPluginFramework时 抛出异常 throw ctkServiceEx
  • 【2022第十届‘泰迪杯’挑战赛】A题:害虫识别完整版(大致思路。详细过程和代码以及结果csv在压缩包中)

    2022第十届 泰迪杯 挑战赛 A题 害虫识别完整版 已有完整结果 2022泰迪杯挑战赛A题害虫识别完整版 大致思路 详细过程和代码在压缩包中 正式数据 2022 04 06 正式数据 提取码 u54n 写在前面 完整版下载 建议Chrom
  • ios备忘录下载安卓版_ios8备忘录app软件下载

    ios8备忘录最新版是一款可以在手机上安装ios8专用备忘录的软件 可以快速记录事件 支持语音输入 还可以合并多个便签 超多样式可以自己选择 感受全新的记录体验 软件的功能众多 还可以设置定时提醒功能 快来试试吧 ios8备忘录软件介绍 你
  • Latex

    http www tablesgenerator com 表格神器 LibreDigitalLibrary github io 印度人搜集的教育资源 1 MCM The Mathematical Contest in Modeling ht
  • java创建以任意图片为背景的窗口

    swing自带的窗体是不能够满足我们的应用需求的 所以需要制作任意图片和形状的JFrame框体 比如下图 并且可以设置窗体背景图片的透明度 下面说明如何做到上图的效果 1 首先你得需要一张好看的图片 比如羊皮纸 但是这个下载的图片是方方正正