電腦日常使用過程中,我們常常可以看到許多軟件有懸浮窗,方便快捷,甚至有的還可以在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();
}
}
本教程到這裏就結束了,感謝大家觀看!