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创建以任意图片为背景的窗口 的相关文章

  • 将项目添加到 JComboBox

    我在面板上使用组合框 据我所知 我们可以仅添加带有文本的项目 comboBox addItem item text 但有时我需要使用项目和项目文本的某些值 例如在 html select 中
  • 按下了 JSpinner 的哪个按钮?

    是否有可能知道 从从 JSpinner 接收 ChangeEvent 的 ChangeListener 内部 按下了哪个按钮 递增 递减 简短回答 不 无法知道按下了哪个按钮 长答案 根据您的模型和更改监听器 如果您对新值和之前的值进行比较
  • 如何在 JPanel 上绘制后重新绘制它?

    我有一个继承自 JPanel 的组件 我在上面绘制了一个网格 现在我有一个 JComboBox 我希望用户能够在此处选择网格大小 然后按按钮进行网格更改 重新绘制网格 问题是它绘制了初始网格 但是一旦用户从 JComboBox 选择网格大小
  • 线程睡眠阻止我的 Swing 应用程序执行

    我的应用程序发生的事情是有道理的 但我不知道如何修复它 以下是我的应用程序功能的简要描述 计时器窗口应显示在屏幕右下角并显示实时时间 一小时后 它应该执行一些操作 我还没有决定该操作 我面临的问题是定时器 java当我刷新实时计时器的秒数时
  • 摆脱潜在的僵局

    我遇到了看似僵局 死锁听起来是不是有点像 无法关闭窗口 如果 IDE 上没有终止按钮 则无法终止 空白 什么也没有发生 没有任何异常或错误 如果这些是在僵局中发生的事情 那么我可能已经解决了一半的问题 我知道有两个线程正在运行 AWT Ev
  • 如何使用 BoxLayout 设置容器内的组件大小

    我在使用时遇到问题BoxLayout 在我的示例中 我尝试减小文本字段的高度并更改按钮的宽度 如底部图片中的绿色标记所示 我了解技术setPreferredSize and setMaximumSize 但它没有发挥应有的作用 线路add
  • 如何在java swing中的每个页面中打印带有页脚的整个JPanel

    好吧 这可能很简单 但想不通 我有一个包含 JTable 的 JPanel JTable 包含很少的行 有时更多 因为我推入其中的表模型取决于数据库 但是 我不使用任何包含 JTable 的 JScolpane 因此 当 JTable 包含
  • Java Swing:清除JList而不触发监听器

    我的情况如下 我有一个 JList 只要在列表中进行选择 它就会触发搜索 使用 ListSelectionListener 我正在尝试使用以下命令重置列表上的选择list clearSelection 这样做的问题是使用clearSelec
  • 如何动态更改JList中所选项目的背景颜色

    如何动态更改 JList 中选择的项目的背景颜色 像下面这样的东西应该有助于作为起点 public class SelectedListCellRenderer extends DefaultListCellRenderer Overrid
  • 在 Swing 中使用印度语输入法输入文本时不显示英文字符

    我正在开发一个应用程序 它接受英语文本并使用自定义的第 3 方 API 将音译为印度语 受支持的几种语言之一 该应用程序针对 Windows XP 7 和 Ubuntu 我们使用自定义输入法来加载所需的印度语字体 并使用它渲染文本 此外 用
  • 如何自定义 JFrame 上的标题栏?

    我想在我的 Java Swing 桌面应用程序中拥有一个自定义的标题栏 最好的方法是什么 我可以通过在 JFrame 的构造函数中使用以下代码来使用 Swing 标题栏 this setUndecorated true this getRo
  • 更改 JTextPane 的大小

    我是Java新手 刚刚在StackOverflow中找到了这段代码 ResizeTextArea https stackoverflow com questions 9370561 enabling scroll bars when jte
  • setToolTipText 消耗鼠标事件的解决方法?

    这似乎是 SWING 已验证的问题 http forums sun com thread jspa threadID 385730 http forums sun com thread jspa threadID 385730 我目前正在尝
  • Java LostFocus 和 InputVerifier,按反向制表符顺序移动

    我有一个 GUI 应用程序 它使用 InputVerifier 在产生焦点之前检查文本字段的内容 这都是很正常的 然而 昨天发现了一个问题 这似乎是一个错误 但我在任何地方都找不到任何提及它的地方 在我将其报告为错误之前 我想我应该问 我在
  • Java Swing - 如何禁用 JPanel?

    我有一些JComponents on a JPanel我想在按下 开始 按钮时禁用所有这些组件 目前 我通过以下方式显式禁用所有组件 component1 setEnabled false 但是有什么办法可以一次性禁用所有组件吗 我尝试禁用
  • JScrollPane 自动换行

    我有个问题 在 JScrollPane 中 我使用 JPanel 的继承者作为 viewPort 继承者可以包含标签 单选按钮 复选框和其他元素 取决于实现 在 JScrollPane 中设置 HORIZONTAL SCROLLBAR NE
  • 使用按钮作为列表的渲染器

    我想使用一个更复杂的渲染器 其中包含列表的多个组件 更准确地说 类似于this https stackoverflow com questions 10840498 java swing 1 6 textinput like firefox
  • 为什么 instanceof 不能与 JPanel 和 JComponent 一起使用?

    我觉得我在这里错过了一些非常明显的东西 对于 Java 大师来说是很容易实现的目标 我的代码如下所示 private static void myFunc JComponent c if c instanceof JPanel stuff
  • JTable 和 JScrollpane 大小的问题

    我有一个JScrollPane with a JTable在里面 在里面JTable我最初有 3 行 稍后添加行 默认JTable我的 3 行很难看 因为JScrollPane calls getPreferredScrollableVie
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框

随机推荐

  • 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 首先你得需要一张好看的图片 比如羊皮纸 但是这个下载的图片是方方正正