Java中JFrame實(shí)現(xiàn)無(wú)邊框無(wú)標(biāo)題方法
很多時(shí)候我們弄一個(gè)界面,不想要默認(rèn)的邊框,或者不想要右上角的那個(gè)最大化按鈕,比如qq面板上面就沒(méi)有最大化按鈕。
但是我查了很多資料都說(shuō)不能直接去掉最大化按鈕,必須把整個(gè)邊框和標(biāo)題都去掉,然后自己畫(huà)。。

這個(gè)測(cè)試代碼也很簡(jiǎn)單:
《1》JFrame無(wú)邊框無(wú)標(biāo)題
《2》添加背景圖片(添加背景圖片有很多方法,大致上都是圖片在JLabel里面,JLabel在Panel上面,Panel上面還有一個(gè)Panel放其它控件)
《3》創(chuàng)建ImageIcon,直接用new ImageIcon("img/aaa.jpg");創(chuàng)建的時(shí)候,圖片不能放在src包里面,放里面不行,我也不知道為什么。。。
《3》實(shí)現(xiàn)拖動(dòng)。無(wú)邊框無(wú)標(biāo)題之后是不能拖動(dòng)了,要自己實(shí)現(xiàn)。

package com.qiantu.jframe;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
public class JFrameNoBorder extends JFrame {
public static void main(String[] args) {
JFrameNoBorder j = new JFrameNoBorder();
j.setVisible(true);
}
private static final long serialVersionUID = 1L;
//用于處理拖動(dòng)事件,表示鼠標(biāo)按下時(shí)的坐標(biāo),相對(duì)于JFrame
int xOld = 0;
int yOld = 0;
public JFrameNoBorder() {
this.setLayout(null);
//處理拖動(dòng)事件
this.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
xOld = e.getX();
yOld = e.getY();
}
});
this.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
int xOnScreen = e.getXOnScreen();
int yOnScreen = e.getYOnScreen();
int xx = xOnScreen - xOld;
int yy = yOnScreen - yOld;
JFrameNoBorder.this.setLocation(xx, yy);
}
});
//JLayeredPane用于添加兩個(gè)圖層的,一個(gè)用于背景,一個(gè)用于界面
JLayeredPane layeredPane = new JLayeredPane();
layeredPane.setBounds(0, 0, 200, 200);
this.add(layeredPane);
//背景Panel
JPanel bgPanel = new JPanel();
bgPanel.setBounds(0, 0, 200, 200);
layeredPane.add(bgPanel);
//背景圖片,添加到背景Panel里面
JLabel bgLabel = new JLabel(new ImageIcon("img/bgImage.png"));
bgPanel.add(bgLabel);
//主界面,也就是背景上面的一層Panel
JPanel mainPanel = new JPanel();
mainPanel.setBounds(0, 0, 200, 200);
mainPanel.setLayout(null);
layeredPane.add(mainPanel);
//關(guān)閉按鈕
JButton closeButton = new JButton();
closeButton.setIcon(new ImageIcon("img/closeButton.png"));
closeButton.setBounds(170, 0, 30, 30);
closeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
mainPanel.add(closeButton);
this.setBounds(50,50,200,200);
this.setUndecorated(true);
}
}
拖動(dòng)原理圖:

- 超簡(jiǎn)單的java獲取鼠標(biāo)點(diǎn)擊位置坐標(biāo)的實(shí)例(鼠標(biāo)在Jframe上的坐標(biāo))
- java通過(guò)JFrame做一個(gè)登錄系統(tǒng)的界面完整代碼示例
- Java圖形化界面設(shè)計(jì)之容器(JFrame)詳解
- java Swing JFrame框架類中setDefaultCloseOperation的參數(shù)含義與用法示例
- java生成餅圖svg及JFreeChart生成svg圖表
- Java之JFrame輸出Helloworld實(shí)例
- Java飛行記錄器JFR功能實(shí)現(xiàn)過(guò)程圖解
相關(guān)文章
淺談js文件引用方式及其同步執(zhí)行與異步執(zhí)行
下面小編就為大家?guī)?lái)一篇淺談js文件引用方式及其同步執(zhí)行與異步執(zhí)行。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10
如何修改FeginCilent定義的服務(wù)名到指定服務(wù)
這篇文章主要介紹了修改FeginCilent定義的服務(wù)名到指定服務(wù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Java?FTP協(xié)議實(shí)現(xiàn)文件下載功能
FTP(File?Transfer?Protocol)就是文件傳輸協(xié)議。通過(guò)FTP客戶端從遠(yuǎn)程FTP服務(wù)器上拷貝文件到本地計(jì)算機(jī)稱為下載,將本地計(jì)算機(jī)上的文件復(fù)制到遠(yuǎn)程FTP服務(wù)器上稱為上傳,上傳和下載是FTP最常用的兩個(gè)功能2022-11-11
Spring/Spring Boot 中優(yōu)雅地做參數(shù)校驗(yàn)拒絕 if/else 參數(shù)校驗(yàn)
這篇文章主要介紹了Spring/Spring Boot 中優(yōu)雅地做參數(shù)校驗(yàn)拒絕 if/else 參數(shù)校驗(yàn),本文使用最新的 Spring Boot 版本 2.4.5,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-04-04
springboot快速搭建ftpserver服務(wù)端的詳細(xì)步驟
基于springboot,使用ftpserver快速搭建一個(gè)FTP服務(wù)端,搭建過(guò)程很簡(jiǎn)單,我們把過(guò)程分成4個(gè)步驟,一分鐘內(nèi)快速完成構(gòu)建,感興趣的朋友跟隨小編一起看看吧2023-11-11
Springboot中@ConfigurationProperties輕松管理應(yīng)用程序的配置信息詳解
通過(guò)@ConfigurationProperties注解,可以將外部配置文件中的屬性值注入到JavaBean中,簡(jiǎn)化了配置屬性的讀取和管理,這使得SpringBoot應(yīng)用程序中配置文件的屬性值可以映射到POJO類中,實(shí)現(xiàn)類型安全的屬性訪問(wèn),此方法避免了手動(dòng)讀取配置文件屬性的需要2024-10-10

