悬浮窗java_Java制作一个简易的悬浮窗/PPT悬浮窗
電腦日常使用過程中,我們常常可以看到許多軟件有懸浮窗,方便快捷,甚至有的還可以在PPT里面使用。這是怎么實現(xiàn)的呢?今天我就來分享一下Java制作一個簡單懸浮窗的方法,可以在PPT里面使用。
運行效果:
其實懸浮窗制作很簡單,最重要的一點就是需要它總在最前顯示,只需要使用JFrame類里面的一個方法即可實現(xiàn);然后就是要去掉窗口邊框,并設(shè)置窗口透明方便后面添加我們的貼圖,自定義窗口形狀等等。
代碼如下:JFrame jf=new JFrame(); //先實例化一個窗口對象
jf.setUndecorated(true);//窗口去邊框
jf.setAlwaysOnTop(true);//設(shè)置窗口總在最前
jf.setBackground(new Color(0,0,0,0));//設(shè)置窗口背景為透明色
去掉邊框的窗口無法移動,我們要通過如下代碼實現(xiàn)窗口拖動:
先在當(dāng)前類里面創(chuàng)建兩個整型全局變量分別作為我們鼠標(biāo)所在位置的x,y坐標(biāo):static int mouseAtX;
static int mouseAtY;
再通過添加窗口監(jiān)聽器的方法,監(jiān)聽鼠標(biāo)按住窗口時的位置等,來實現(xiàn)拖動窗口:jf.addMouseListener(new MouseAdapter() //設(shè)置窗口可拖動
{
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));//設(shè)置拖拽后,窗口的位置
}
});
然后添加我們的貼圖,按鈕和主題,最好是背景透明的png格式圖片,這樣可以達(dá)到自定義你的懸浮窗外表的效果(因為窗口背景已經(jīng)被設(shè)置成透明了,邊框也去掉了):
示例圖片:
//按鈕1
ImageIcon run=new ImageIcon("res\\button\\pptrun.png");//實例化圖像對象以作為按鈕貼圖
JButton PPTrun=new JButton(run);//將上面的圖像對象設(shè)置為按鈕貼圖
PPTrun.setContentAreaFilled(false);//設(shè)置按鈕背景透明
PPTrun.setBorderPainted(false);//去掉按鈕邊框
PPTrun.setBounds(8, 311, 130, 58);//設(shè)置按鈕大小及位置
//按鈕2
ImageIcon back=new ImageIcon("res\\button\\pptback.png");//實例化圖像對象以作為按鈕貼圖
JButton PPTback=new JButton(back);//將上面的圖像對象設(shè)置為按鈕貼圖
PPTback.setContentAreaFilled(false);//設(shè)置按鈕背景透明
PPTback.setBorderPainted(false);//去掉按鈕邊框
PPTback.setBounds(8, 373, 130, 58);
//按鈕3
ImageIcon exit=new ImageIcon("res\\button\\pptexit.png");//實例化圖像對象以作為按鈕貼圖
JButton PPTexit=new JButton(exit);//將上面的圖像對象設(shè)置為按鈕貼圖
PPTexit.setContentAreaFilled(false);//設(shè)置按鈕背景透明
PPTexit.setBorderPainted(false);//去掉按鈕邊框
PPTexit.setBounds(8, 432, 130, 58);//設(shè)置按鈕大小及位置
ImageIcon c=new ImageIcon("res\\character\\1.png");//實例化圖像對象以作為窗口主題貼圖
JLabel l=new JLabel(c);//把上面的主題貼圖添加到標(biāo)簽對象里面去
l.setBounds(0, 136, 144, 177);//設(shè)置標(biāo)簽對象大小及位置
當(dāng)然,在這里有一點很重要 ,那就是setBounds()方法的使用。
這個方法是用于設(shè)置組件在窗口里面的位置及大小的方法。
這個方法在swing里面的所有組件都適用(JButton按鈕,JLabel標(biāo)簽,JTextField輸入框等等),上面的代碼也有,用法如下:object.setBounds(x坐標(biāo),y坐標(biāo),組件寬,組件高);
這里object是我們創(chuàng)建的對象(如JButton按鈕,JLabel標(biāo)簽,JTextField輸入框等等),x、y坐標(biāo)都是相對于窗口內(nèi)部的坐標(biāo),(0,0)在窗口的最左上方,組件寬、高的單位都為像素。在創(chuàng)建帶有圖片的JLabel對象或JButton按鈕對象時,尤其要注意把JLabel或JButton的寬、高設(shè)置得與圖片一致,否則圖片無法顯示完全,像我這里圖片大小為:144x177
因此在上面可以看到我的JLabel對象setBounds里面的寬和高分別是144和177。
不過手動輸入數(shù)據(jù)并一次次調(diào)試是很難的,我這里使用了WindowBuilder插件,在里面拖動組件即可方便地設(shè)置組件位置,也會生成對應(yīng)代碼。不過還是要注意最好后面手動將寬高改的和圖片一致。
使用windowbuilder插件里面的Absolute layout布局應(yīng)用到窗口即可,這里不再過多贅述插件使用方法,請自行百度。
最后使用JPanel面板對象規(guī)整我們的各個組件再添加到窗口里面:JPanel p=new JPanel();
p.setLayout(null);
//添加各個組件
p.add(l);
p.add(PPTrun);
p.add(PPTback);
p.add(PPTexit);
p.setOpaque(false); //設(shè)置面板對象背景透明
jf.getContentPane().add(p); //把面板對象添加到窗口里面
jf.show(); //顯示窗口
記得JPanel也要設(shè)置背景透明!
這樣我們的懸浮窗就做好了,還可以在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);//設(shè)置窗口總在最前
jf.setBackground(new Color(0,0,0,0));//設(shè)置窗口背景為透明色
jf.addMouseListener(new MouseAdapter() //設(shè)置窗口可拖動
{
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));//設(shè)置拖拽后,窗口的位置
}
});
//按鈕1
ImageIcon run=new ImageIcon("res\\button\\pptrun.png");//實例化圖像對象以作為按鈕貼圖
JButton PPTrun=new JButton(run);//將上面的圖像對象設(shè)置為按鈕貼圖
PPTrun.setContentAreaFilled(false);//設(shè)置按鈕背景透明
PPTrun.setBorderPainted(false);//去掉按鈕邊框
PPTrun.setBounds(8, 311, 130, 58);//設(shè)置按鈕大小及位置
//按鈕2
ImageIcon back=new ImageIcon("res\\button\\pptback.png");//實例化圖像對象以作為按鈕貼圖
JButton PPTback=new JButton(back);//將上面的圖像對象設(shè)置為按鈕貼圖
PPTback.setContentAreaFilled(false);//設(shè)置按鈕背景透明
PPTback.setBorderPainted(false);//去掉按鈕邊框
PPTback.setBounds(8, 373, 130, 58);
//按鈕3
ImageIcon exit=new ImageIcon("res\\button\\pptexit.png");//實例化圖像對象以作為按鈕貼圖
JButton PPTexit=new JButton(exit);//將上面的圖像對象設(shè)置為按鈕貼圖
PPTexit.setContentAreaFilled(false);//設(shè)置按鈕背景透明
PPTexit.setBorderPainted(false);//去掉按鈕邊框
PPTexit.setBounds(8, 432, 130, 58);//設(shè)置按鈕大小及位置
ImageIcon c=new ImageIcon("res\\character\\1.png");//實例化圖像對象以作為窗口主題貼圖
JLabel l=new JLabel(c);//把上面的主題貼圖添加到標(biāo)簽對象里面去
l.setBounds(0, 136, 144, 177);//設(shè)置標(biāo)簽對象大小及位置
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();
}
}
本教程到這里就結(jié)束了,感謝大家觀看!
總結(jié)
以上是生活随笔為你收集整理的悬浮窗java_Java制作一个简易的悬浮窗/PPT悬浮窗的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB基础教程(9)——高级积分运
- 下一篇: java多线程 future_Java多