Java中JFrame实现无边框无标题方法

 更新时间:2015年05月20日 09:33:11   投稿:junjie  
这篇文章主要介绍了Java中JFrame实现无边框无标题方法,本文直接给出代码实例,需要的朋友可以参考下

很多时候我们弄一个界面,不想要默认的边框,或者不想要右上角的那个最大化按钮,比如qq面板上面就没有最大化按钮。

但是我查了很多资料都说不能直接去掉最大化按钮,必须把整个边框和标题都去掉,然后自己画。。

这个测试代码也很简单:
《1》JFrame无边框无标题
《2》添加背景图片(添加背景图片有很多方法,大致上都是图片在JLabel里面,JLabel在Panel上面,Panel上面还有一个Panel放其它控件)
《3》创建ImageIcon,直接用new ImageIcon("img/aaa.jpg");创建的时候,图片不能放在src包里面,放里面不行,我也不知道为什么。。。
《3》实现拖动。无边框无标题之后是不能拖动了,要自己实现。

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;
 //用于处理拖动事件,表示鼠标按下时的坐标,相对于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);

 //关闭按钮
 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);
 }
}

拖动原理图:


相关文章

  • 浅谈js文件引用方式及其同步执行与异步执行

    浅谈js文件引用方式及其同步执行与异步执行

    下面小编就为大家带来一篇浅谈js文件引用方式及其同步执行与异步执行。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • Java volatile关键字特性讲解下篇

    Java volatile关键字特性讲解下篇

    JMM要求保证可见性、原子性、有序性,volatile可以保证其中的两个,本篇文章具体验证volatile的可见性,不原子性和禁重排,同时解决volatile的不保证原子性,让代码具有原子性
    2022-12-12
  • 如何修改FeginCilent定义的服务名到指定服务

    如何修改FeginCilent定义的服务名到指定服务

    这篇文章主要介绍了修改FeginCilent定义的服务名到指定服务的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • redis分布式锁解决表单重复提交的问题

    redis分布式锁解决表单重复提交的问题

    在系统中,有些接口如果重复提交,可能会造成脏数据或者其他的严重的问题,所以我们一般会对与数据库有交互的接口进行重复处理。本文就详细的介绍一下redis分布式锁解决表单重复提交,感兴趣的可以了解一下
    2021-11-11
  • Java FTP协议实现文件下载功能

    Java FTP协议实现文件下载功能

    FTP(File Transfer Protocol)就是文件传输协议。通过FTP客户端从远程FTP服务器上拷贝文件到本地计算机称为下载,将本地计算机上的文件复制到远程FTP服务器上称为上传,上传和下载是FTP最常用的两个功能
    2022-11-11
  • Spring/Spring Boot 中优雅地做参数校验拒绝 if/else 参数校验

    Spring/Spring Boot 中优雅地做参数校验拒绝 if/else 参数校验

    这篇文章主要介绍了Spring/Spring Boot 中优雅地做参数校验拒绝 if/else 参数校验,本文使用最新的 Spring Boot 版本 2.4.5,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-04-04
  • springboot快速搭建ftpserver服务端的详细步骤

    springboot快速搭建ftpserver服务端的详细步骤

    基于springboot,使用ftpserver快速搭建一个FTP服务端,搭建过程很简单,我们把过程分成4个步骤,一分钟内快速完成构建,感兴趣的朋友跟随小编一起看看吧
    2023-11-11
  • 从架构思维角度分析高并发下幂等性解决方案

    从架构思维角度分析高并发下幂等性解决方案

    幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数
    2022-01-01
  • 一文带你了解Java中的SPI机制

    一文带你了解Java中的SPI机制

    SPI 全称是 Service Provider Interface,是一种 JDK 内置的动态加载实现扩展点的机制,本文主要为大家介绍了SPI机制的原理与使用,需要的可以参考一下
    2023-04-04
  • Springboot中@ConfigurationProperties轻松管理应用程序的配置信息详解

    Springboot中@ConfigurationProperties轻松管理应用程序的配置信息详解

    通过@ConfigurationProperties注解,可以将外部配置文件中的属性值注入到JavaBean中,简化了配置属性的读取和管理,这使得SpringBoot应用程序中配置文件的属性值可以映射到POJO类中,实现类型安全的属性访问,此方法避免了手动读取配置文件属性的需要
    2024-10-10

最新评论