欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-03 17:36:58
很多时候我们弄一个界面,不想要默认的边框,或者不想要右上角的那个最大化按钮,比如qq面板上面就没有最大化按钮。 但是我查了很多资料都说不能直接去掉最大化按钮,必须把整个边...

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

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

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

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

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

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);
 }
}

拖动原理图:

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