Java中JFrame实现无边框无标题方法
程序员文章站
2024-03-03 17:36:58
很多时候我们弄一个界面,不想要默认的边框,或者不想要右上角的那个最大化按钮,比如qq面板上面就没有最大化按钮。
但是我查了很多资料都说不能直接去掉最大化按钮,必须把整个边...
很多时候我们弄一个界面,不想要默认的边框,或者不想要右上角的那个最大化按钮,比如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); } }
拖动原理图: