电脑日常使用过程中,我们常常可以看到许多软件有悬浮窗,方便快捷,甚至有的还可以在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();

}

}

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

悬浮窗java_Java制作一个简易的悬浮窗/PPT悬浮窗相关推荐

  1. 使用Java制作一个简易的远控终端

    使用Java制作一个简易的远控终端 远控终端的本质 1.服务端(攻击者)传输消息 ----> socket连接 ----> 客户端(被攻击者)接收消息 2.客户端执行消息内容(即执行服务端 ...

  2. 利用CSS浮动制作一个简易导航栏

    初学CSS,利用CSS浮动和无序列表制作一个简易导航栏: <!DOCTYPE html> <html lang="en"> <head>< ...

  3. 使用 history 对象和 location 对象中的属性和方法制作一个简易的网页浏览工具

    查看本章节 查看作业目录 需求说明: 使用 history 对象和 location 对象中的属性和方法制作一个简易的网页浏览工具 实现思路: 使用history对象中的 forward() 方法和 ...

  4. 用Python制作一个简易的计时器

    前言 今天又带来个小玩意 - 用Python制作一个简易的计时器 这个其实也能自定义一些东西的 就比如名字 颜色啥的 自己看着改就行 有想法的朋友也能自己再写写改改出其他的小功能 效果展示 实现代码 ...

  5. 制作一个简易的计算器

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一 ...

  6. 四节1.5V的5号电池、一个电容、一个12V的报警蜂鸣器、铜线和螺母,在螺母所栓的铜线触发接通电源后,缓慢放电10秒,制作一个简易震动报警器,需要用什么样的电容合适?...

    根据题目描述,需要制作一个简易震动报警器,使用四节1.5V的5号电池作为电源,一个电容,一个12V的报警蜂鸣器,铜线和螺母.在螺母所栓的铜线触发接通电源后,需要缓慢放电10秒. 在这种情况下,需要一个 ...

  7. 使用python制作一个简易的远控终端

    使用python制作一个简易的远控终端 远控终端的本质 1.服务端(攻击者)传输消息 ----> socket连接 ----> 客户端(被攻击者)接收消息 2.客户端执行消息内容(即执行服 ...

  8. 用HTML5制作一个简易计算器

    用H5制作一个简易计算器 最近刚学JavaScript,之后紧接着做了一个简易的计算器,能够实现数字的加减乘除运算. 首先,先用HTML5搭建好计算器大体框架.我这里用了两个表格,一个充当显示器,另一 ...

  9. 电赛练习1《基础版》— 利用Multisim设计并制作一个简易的方波-三角波-正弦波信号发生器,要求输出频率可调,矩形波占空比可调等

    首先呢, 感慨一下,我记得去年这个时候,也是放寒假,我在CSDN上写了第一篇原创,使用python画了一个蜡笔小新的头像,并且我在文末说明了自己会陆续更新很多文章,结果- 到了今天放寒假,我的文章还是 ...

最新文章

  1. 7.1 matlab符号对象(符号对象的建立和四则运算)
  2. 有关数据结构基础知识(数据结构 严蔚敏版)
  3. 【AI杂谈】从一篇参考文献比正文还长的文章,杂谈深度学习综述
  4. html加css作品,我的影视作品,如何在博客园发布带有CSS样式的HTML
  5. visual-studio – 使用TFS 2010防止在Visual Studio 2012上签入pdb文件
  6. java程序设计_Java程序设计-Object类(笔记)
  7. 极光推送JPush使用Java SDK开发
  8. 五分钟看懂plc梯形图程序
  9. linux合并mp4,Linux 下使用ffmpeg 将批量合并ts文件,合成mp4格式
  10. (转)一个初学者RHCE学习考试之路
  11. java宠物商店管理系统_Java实现宠物商店管理系统
  12. windows7下替换记事本
  13. 【FFmpeg】flv转码测试2: 24fps gop为24 恒定码率
  14. 新解决方案销售之一:原则与流程
  15. 使用python爬取猫眼电影、房王、股吧论坛、百度翻译、有道翻译、高德天气、华夏基金、扇贝单词、糗事百科(糗事百科)
  16. maxon产品手册 产品指南 中文版(2019)
  17. crontab可视化管理_Linux可视化的任务管理工具 – Jiacrontab
  18. linux脚本文件编辑器,Shell文件编辑器
  19. Outlook定时/延时发送邮件
  20. 缴纳五险一金,对职场人是利是弊

热门文章

  1. 腾讯视频下载位置_腾讯视频怎么下视频到手机
  2. element el-tree懒加载+搜索
  3. 基本类型与字符串的相互转换
  4. 孩子学计算机最佳年龄,孩子学编程最佳年龄是多少
  5. c语言 dec2oct函数,【Excel函数】DEC2OCT函数 - 曹海峰个人博客
  6. php 事件调度,PHP单元测试调度事件
  7. Gensee移动SDK之(一)结构组成
  8. Maven学习(四)————Eclipse 中的 Maven 工程
  9. python 网页自动化框架_python+selenium自动化框架
  10. linux挂载目录到分区,Ubuntu7.10下挂载/home目录到一个分区的方法