悬浮窗java_Java制作一个简易的悬浮窗/PPT悬浮窗

电脑日常使用过程中,我们常常可以看到许多软件有悬浮窗,方便快捷,甚至有的还可以在PPT里面使用。这是怎么实现的呢?今天我就来分享一下Java制作一个简单悬浮窗的方法,可以在PPT里面使用。

运行效果:

其实悬浮窗制作很简单,最重要的一点就是需要它总在最前显示,只需要使用JFrame类里面的一个方法即可实现;然后就是要去掉窗口边框,并设置窗口透明方便后面添加我们的贴图,自定义窗口形状等等。

代码如下:JFrame jf=new JFrame(); //先实例化一个窗口对象

jf.setUndecorated(true);//窗口去边框

jf.setAlwaysOnTop(true);//设置窗口总在最前

jf.setBackground(new Color(0,0,0,0));//设置窗口背景为透明色

去掉边框的窗口无法移动,我们要通过如下代码实现窗口拖动:

先在当前类里面创建两个整型全局变量分别作为我们鼠标所在位置的x,y坐标:static int mouseAtX;

static int mouseAtY;

再通过添加窗口监听器的方法,监听鼠标按住窗口时的位置等,来实现拖动窗口:jf.addMouseListener(new MouseAdapter() //设置窗口可拖动

{

public void mousePressed(MouseEvent e)

{

mouseAtX = e.getPoint().x;

mouseAtY= e.getPoint().y;

}

});

jf.addMouseMotionListener(new MouseMotionAdapter()

{

public void mouseDragged(MouseEvent e)

{

jf.setLocation((e.getXOnScreen()-mouseAtX),(e.getYOnScreen()-mouseAtY));//设置拖拽后,窗口的位置

}

});

然后添加我们的贴图,按钮和主题,最好是背景透明的png格式图片,这样可以达到自定义你的悬浮窗外表的效果(因为窗口背景已经被设置成透明了,边框也去掉了):

示例图片:

//按钮1

ImageIcon run=new ImageIcon("res\\button\\pptrun.png");//实例化图像对象以作为按钮贴图

JButton PPTrun=new JButton(run);//将上面的图像对象设置为按钮贴图

PPTrun.setContentAreaFilled(false);//设置按钮背景透明

PPTrun.setBorderPainted(false);//去掉按钮边框

PPTrun.setBounds(8, 311, 130, 58);//设置按钮大小及位置

//按钮2

ImageIcon back=new ImageIcon("res\\button\\pptback.png");//实例化图像对象以作为按钮贴图

JButton PPTback=new JButton(back);//将上面的图像对象设置为按钮贴图

PPTback.setContentAreaFilled(false);//设置按钮背景透明

PPTback.setBorderPainted(false);//去掉按钮边框

PPTback.setBounds(8, 373, 130, 58);

//按钮3

ImageIcon exit=new ImageIcon("res\\button\\pptexit.png");//实例化图像对象以作为按钮贴图

JButton PPTexit=new JButton(exit);//将上面的图像对象设置为按钮贴图

PPTexit.setContentAreaFilled(false);//设置按钮背景透明

PPTexit.setBorderPainted(false);//去掉按钮边框

PPTexit.setBounds(8, 432, 130, 58);//设置按钮大小及位置

ImageIcon c=new ImageIcon("res\\character\\1.png");//实例化图像对象以作为窗口主题贴图

JLabel l=new JLabel(c);//把上面的主题贴图添加到标签对象里面去

l.setBounds(0, 136, 144, 177);//设置标签对象大小及位置

当然,在这里有一点很重要 ,那就是setBounds()方法的使用。

这个方法是用于设置组件在窗口里面的位置及大小的方法。

这个方法在swing里面的所有组件都适用(JButton按钮,JLabel标签,JTextField输入框等等),上面的代码也有,用法如下:object.setBounds(x坐标,y坐标,组件宽,组件高);

这里object是我们创建的对象(如JButton按钮,JLabel标签,JTextField输入框等等),x、y坐标都是相对于窗口内部的坐标,(0,0)在窗口的最左上方,组件宽、高的单位都为像素。在创建带有图片的JLabel对象或JButton按钮对象时,尤其要注意把JLabel或JButton的宽、高设置得与图片一致,否则图片无法显示完全,像我这里图片大小为:144x177

因此在上面可以看到我的JLabel对象setBounds里面的宽和高分别是144和177。

不过手动输入数据并一次次调试是很难的,我这里使用了WindowBuilder插件,在里面拖动组件即可方便地设置组件位置,也会生成对应代码。不过还是要注意最好后面手动将宽高改的和图片一致。

使用windowbuilder插件里面的Absolute layout布局应用到窗口即可,这里不再过多赘述插件使用方法,请自行百度。

最后使用JPanel面板对象规整我们的各个组件再添加到窗口里面:JPanel p=new JPanel();

p.setLayout(null);

//添加各个组件

p.add(l);

p.add(PPTrun);

p.add(PPTback);

p.add(PPTexit);

p.setOpaque(false); //设置面板对象背景透明

jf.getContentPane().add(p); //把面板对象添加到窗口里面

jf.show(); //显示窗口

记得JPanel也要设置背景透明!

这样我们的悬浮窗就做好了,还可以在PPT里面显示!

完整代码如下:import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class FloatWindow{

static int mouseAtX;

static int mouseAtY;

public static void main(String[] args) {

Toolkit kit=Toolkit.getDefaultToolkit();

Dimension sc=kit.getScreenSize();

JFrame jf=new JFrame();

jf.setSize(145,500);

jf.setLocation(sc.width/45,sc.height/9);

jf.setUndecorated(true);//窗口去边框

jf.setAlwaysOnTop(true);//设置窗口总在最前

jf.setBackground(new Color(0,0,0,0));//设置窗口背景为透明色

jf.addMouseListener(new MouseAdapter() //设置窗口可拖动

{

public void mousePressed(MouseEvent e)

{

mouseAtX = e.getPoint().x;

mouseAtY= e.getPoint().y;

}

});

jf.addMouseMotionListener(new MouseMotionAdapter()

{

public void mouseDragged(MouseEvent e)

{

jf.setLocation((e.getXOnScreen()-mouseAtX),(e.getYOnScreen()-mouseAtY));//设置拖拽后,窗口的位置

}

});

//按钮1

ImageIcon run=new ImageIcon("res\\button\\pptrun.png");//实例化图像对象以作为按钮贴图

JButton PPTrun=new JButton(run);//将上面的图像对象设置为按钮贴图

PPTrun.setContentAreaFilled(false);//设置按钮背景透明

PPTrun.setBorderPainted(false);//去掉按钮边框

PPTrun.setBounds(8, 311, 130, 58);//设置按钮大小及位置

//按钮2

ImageIcon back=new ImageIcon("res\\button\\pptback.png");//实例化图像对象以作为按钮贴图

JButton PPTback=new JButton(back);//将上面的图像对象设置为按钮贴图

PPTback.setContentAreaFilled(false);//设置按钮背景透明

PPTback.setBorderPainted(false);//去掉按钮边框

PPTback.setBounds(8, 373, 130, 58);

//按钮3

ImageIcon exit=new ImageIcon("res\\button\\pptexit.png");//实例化图像对象以作为按钮贴图

JButton PPTexit=new JButton(exit);//将上面的图像对象设置为按钮贴图

PPTexit.setContentAreaFilled(false);//设置按钮背景透明

PPTexit.setBorderPainted(false);//去掉按钮边框

PPTexit.setBounds(8, 432, 130, 58);//设置按钮大小及位置

ImageIcon c=new ImageIcon("res\\character\\1.png");//实例化图像对象以作为窗口主题贴图

JLabel l=new JLabel(c);//把上面的主题贴图添加到标签对象里面去

l.setBounds(0, 136, 144, 177);//设置标签对象大小及位置

JPanel p=new JPanel();

p.setLayout(null);

p.add(l);

p.add(PPTrun);

p.add(PPTback);

p.add(PPTexit);

p.setOpaque(false);

jf.getContentPane().add(p);

jf.show();

}

}

本教程到这里就结束了,感谢大家观看!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【youcans 的 OpenCV 例程200篇】193.基于Gabor 滤波器的特征提取

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】193.基于Gabor 滤波器的特征提取 6.5 Gabor 滤波器 Gabor 变换是一种加窗短时傅里叶变换,以高斯函数作为短时傅里叶变换的窗函数,因此可以在频域不同尺度、不同方向上提取特征。 G…

java设置行显示复选框_java spring cheakbox复选框怎么行或者列删除添加

展开全部你好!使用原62616964757a686964616fe78988e69d8331333431353366生js实现,还是可以使用其他框架?我这里有个基于jquery的实现:$(document).ready(function(){function Info(id, name, birthday, workDate, skill, experien…

MyEclipse生成常用方法

我们使用Eclipse工具开发的时候,有很多的代码我们是不用写的,我们可以直接生成我们想要的方法,那么怎么生成我们经常使用的方法呢??? 首先打开我们的MyEclipse工具 到代码编辑页面,在已经定义好…

【youcans 的 OpenCV 例程200篇】194.寻找图像轮廓(cv.findContours)

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】194.寻找图像轮廓(cv.findContours) 1. 轮廓 轮廓是一系列相连的像素点组成的曲线,代表了物体的基本外形。轮廓常用于形状分析和物体的检测和识别。 边缘检测根据灰度的…

java线程池执行器_Java线程池ThreadPoolExecutor的使用

Java线程池ThreadPoolExecutor的使用ThreadPoolExecutor就是我们用来实现线程的一个执行器,它实现了Excutor和ExecutorService接口。Excutor接口只定义了一个方法就是execute用来执行任务。ExecutorService继承于Excutor并添加了一些其他的执行任务的方法和管理线程…

密码强度显示

使用HTML,CSS及JS实现注册功能中密码强度的显示&#xff0c;根据输入的密码判断并显示用户输入密码的强度等级是高还是低等。 效果演示 代码演示 html内容 <div class"container"><div class"userName-wrapper"><label for"userN…

【youcans 的 OpenCV 例程200篇】195.绘制图像轮廓(cv.drawContours)

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】195.绘制图像轮廓&#xff08;cv.drawContours&#xff09; 1. 轮廓 轮廓是一系列相连的像素点组成的曲线&#xff0c;代表了物体的基本外形。轮廓常用于形状分析和物体的检测和识别。 边缘检测根据灰度的…

java终结方法_Java终结任务:Callable和Future

在这里首先介绍下Callable和Future&#xff0c;我们知道通常创建线程的2种方式&#xff0c;一种是直接继承Thread&#xff0c;另外一种就是实现Runnable接口&#xff0c;但是这两种方式创建的线程不返回结果&#xff0c;而Callable是和Runnable类似的接口定义&#xff0c;但是通…

【youcans 的 OpenCV 例程200篇】196.图像的矩和不变矩(cv.moments)

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】196.图像的矩和不变矩&#xff08;cv.moments&#xff09; 2. 轮廓的特征描述 在对实际图像进行轮廓查找时&#xff0c;得到的轮廓数量很多。获取轮廓后&#xff0c;通常基于轮廓的特征进行筛选、识别和处…

Spring boot 项目目录结构详解

对SpringBoot项目目录进行分层显示能够使我们的开发思路更加的明确&#xff0c;代码内容更加清晰易懂&#xff0c;下面向大家讲解一下项目目录结构。 代码层的结构 根目录&#xff1a;com.springboot 1.工程启动类(ApplicationServer.java)置于com.springboot.build包下 2.实…

【youcans 的 OpenCV 例程200篇】197.轮廓的基本特征

OpenCV 例程200篇 总目录-202205更新 文章目录【youcans 的 OpenCV 例程200篇】197.轮廓的基本特征2. 轮廓的特征描述2.2 轮廓的面积、周长、质心和近似多边形2.2.1 轮廓的面积2.2.2 轮廓的周长2.2.3 轮廓的质心2.2.4 轮廓的近似2.2.5 轮廓的凸包&#xff08;凸壳&#xff09;例…

Idea 项目导入

我们在刚开始使用新的开发工具IDEA的时候会遇到我们想要导入一个外部项目却不知从何下手&#xff0c;下面我就教给大家如何使用IDEA导入一个外部的项目。 Idea 导入 外部项目 1.点击 file — new 2.打开路径地址&#xff0c;选择需要导入的项目 3.选择创建—next 4.默认—…

【youcans 的 OpenCV 例程200篇】198.基于不变矩的形状相似性检测

OpenCV 例程200篇 总目录-202206更新 【youcans 的 OpenCV 例程200篇】198.基于不变矩的形状相似性检测 3. 基于不变矩检测的图像识别 形状匹配也称为形状相似度检测&#xff0c;用于比较两个形状或两个轮廓。 函数 cv2.matchShapes() 基于 Hu 不变矩检测两个形状之间的相似度…

spring boot 如何修改默认端口号和context path

创建了SpringBoot项目之后进行运行&#xff0c;当我们需要使用游览器进行访问的时候要输入端口号&#xff0c;那麽我们如何来修改这个端口号呢&#xff1f;&#xff1f;&#xff1f; 1.在src/main/resources目录下新建文件application.properties&#xff0c;并进行配置,来重写…

【youcans 的 OpenCV 例程200篇】199.轮廓的外接边界框

OpenCV 例程200篇 总目录-202206更新 【youcans 的 OpenCV 例程200篇】199.轮廓的外接边界框 文章目录【youcans 的 OpenCV 例程200篇】199.轮廓的外接边界框2. 轮廓的特征描述2.3 轮廓的外接边界框2.3.1 轮廓的垂直矩形边界框2.3.2 轮廓的最小矩形边界框2.3.3 轮廓的最小外接圆…

单级联动

想要实现联动的效果首先我们要知道什么是单机联动&#xff0c;所谓的单级联动就是点击输入框的时候&#xff0c;下面会出现多个单级联动的列表供你选择自己所要选择的数据。 我们使用html写主题内容&#xff0c;使用CSS添加样式&#xff0c;使用Jquery实现联动等相关的事件和效…

【youcans 的 OpenCV 例程200篇】200.轮廓的基本属性

OpenCV 例程200篇 总目录-202206更新 文章目录【youcans 的 OpenCV 例程200篇】200.轮廓的基本属性2.4 轮廓的基本属性2.4.1 轮廓的宽高比&#xff08;Aspect Ratio&#xff09;2.4.2 轮廓的面积比&#xff08;Extent&#xff09;2.4.3 轮廓的坚实度&#xff08;Solidity&#…

mysql c api example_The MySQL C API 编程实例

在网上找了一些MYSQL C API编程的文章&#xff0c;看了后认为还是写的不够充分&#xff0c;依据自己经验写了这篇《The MySQL C API 编程实例》&#xff0c;希望对须要调用到MYSQL的C的API的朋友有所帮助&#xff0c;附例中的环境为RedHat在这篇文章里&#xff0c;我们将学会怎…

【youcans 的 OpenCV 例程200篇】结束语

【youcans 的 OpenCV 例程200篇】总目录 【youcans 的 OpenCV 例程200篇】结束语 【youcans 的 OpenCV 例程】真的写到了 200篇&#xff0c;迎来了“结束语”。 本系列原名【OpenCV 例程 100篇】&#xff0c;从 2021年 11月开始写作&#xff0c;原计划每天写一篇&#xff0c;写…

java aspose 导出word_使用aspose.word 第三方的插件实现导出word

#region 生成的excel文件命名和确保文件的唯一性Random rd new Random();DateTime dtime DateTime.Now;string Filename "培训需求表" dtime.Year.ToString() dtime.Month.ToString() dtime.Day.ToString() dtime.Hour.ToString() dtime.Minute.ToString() …