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

這個測試代碼也很簡單:
《1》JFrame無邊框無標(biāo)題
《2》添加背景圖片(添加背景圖片有很多方法,大致上都是圖片在JLabel里面,JLabel在Panel上面,Panel上面還有一個Panel放其它控件)
《3》創(chuàng)建ImageIcon,直接用new ImageIcon("img/aaa.jpg");創(chuàng)建的時候,圖片不能放在src包里面,放里面不行,我也不知道為什么。。。
《3》實現(xiàn)拖動。無邊框無標(biāo)題之后是不能拖動了,要自己實現(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;
//用于處理拖動事件,表示鼠標(biāo)按下時的坐標(biāo),相對于JFrame
int xOld = 0;
int yOld = 0;
public JFrameNoBorder() {
this.setLayout(null);
//處理拖動事件
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用于添加兩個圖層的,一個用于背景,一個用于界面
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);
}
}
拖動原理圖:

相關(guān)文章
淺談js文件引用方式及其同步執(zhí)行與異步執(zhí)行
下面小編就為大家?guī)硪黄獪\談js文件引用方式及其同步執(zhí)行與異步執(zhí)行。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10
如何修改FeginCilent定義的服務(wù)名到指定服務(wù)
這篇文章主要介紹了修改FeginCilent定義的服務(wù)名到指定服務(wù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Spring/Spring Boot 中優(yōu)雅地做參數(shù)校驗拒絕 if/else 參數(shù)校驗
這篇文章主要介紹了Spring/Spring Boot 中優(yōu)雅地做參數(shù)校驗拒絕 if/else 參數(shù)校驗,本文使用最新的 Spring Boot 版本 2.4.5,通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-04-04
springboot快速搭建ftpserver服務(wù)端的詳細(xì)步驟
基于springboot,使用ftpserver快速搭建一個FTP服務(wù)端,搭建過程很簡單,我們把過程分成4個步驟,一分鐘內(nèi)快速完成構(gòu)建,感興趣的朋友跟隨小編一起看看吧2023-11-11
Springboot中@ConfigurationProperties輕松管理應(yīng)用程序的配置信息詳解
通過@ConfigurationProperties注解,可以將外部配置文件中的屬性值注入到JavaBean中,簡化了配置屬性的讀取和管理,這使得SpringBoot應(yīng)用程序中配置文件的屬性值可以映射到POJO類中,實現(xiàn)類型安全的屬性訪問,此方法避免了手動讀取配置文件屬性的需要2024-10-10

