JFrame实现无边框 及 实现拖动和Button关闭功能
来源:互联网 发布:大专程序员 编辑:程序博客网 时间:2024/06/03 05:06
JFrame实现无边框 及 实现拖动和Button关闭功能
在用Java的Swing编程做GUI图形用户界面时,可能有这样的需求,就是不想要外面的那个默认边框,那么如何实现JFrame去边框,以及去边框后又会出现什么问题呢?
使用setUndecorated(true);去边框后
1、JFrame就没有标题了,且不能拖动了,需要自己实现界面的鼠标拖事件。
2、没有最小化、最大化和关闭按钮,一般需要实现关闭功能,不然程序无法关闭。
3、只有在窗体不可显示时才调用此方法。也就是要在setVisible之前调用
例子:
package com.ljheee.frame;
import java.awt.Image;
import java.awt.event.*;
import java.net.URL;
import javax.swing.*;
public class JFrameNoBorder extends JFrame{
//背景图片bgImage
private ImageIcon bgImage = new ImageIcon("src/images/0001.PNG");
//用于处理拖动事件,表示鼠标按下时的坐标,相对于JFrame
int xOld = 0;
int yOld = 0;
public JFrameNoBorder() {
getContentPane().setLayout(null);
this.setLocationRelativeTo(null);
bgImage.setImageObserver(null);
this.setSize(( bgImage).getIconWidth(),bgImage.getIconHeight());
//处理拖动事件---去掉默认边框后,不能拖动了,具体实现如下
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 将该深度范围分成几个不同的层。将组件放入相应的层,这样更容易确保组件正确地重叠
* 在调用 add 的过程中通过传递 int值,从而在 Component 上设置 layer 属性
*/
JLayeredPane layeredPane = new JLayeredPane();
layeredPane.setSize(bgImage.getIconWidth(), bgImage.getIconHeight());
getContentPane().add(layeredPane);
//背景图层Panel,充当容器---最底层
JPanel bgPanel = new JPanel();
bgPanel.setSize(bgImage.getIconWidth(),bgImage.getIconHeight());
layeredPane.add(bgPanel);
//背景图片,添加到背景图层Panel里面
JLabel bgLabel = new JLabel(bgImage);
bgPanel.add(bgLabel);
//主界面,也就是背景上面的一层Panel,可用于添加控件
JPanel mainPanel = new JPanel();
mainPanel.setSize(200,200);
mainPanel.setLayout(null);
layeredPane.add(mainPanel);
//关闭按钮
JButton closeButton = new JButton();
closeButton.setIcon(new ImageIcon("src/images/closebtn.png"));
closeButton.setSize(30, 30);
mainPanel.add(closeButton);
closeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
this.setUndecorated(true);
}
public static void main(String[] args) {
JFrameNoBorder j = new JFrameNoBorder();
j.setVisible(true);
}
}
参阅
http://blog.csdn.net/qiantujava/article/details/10060847
- JFrame实现无边框 及 实现拖动和Button关闭功能
- JFrame实现无边框,实现拖动,实现关闭按钮,打开实现保存文件到本地,实现头像放大功能,实现图片浏览器
- QT实现无边框窗体的最小化,最大化/还原,关闭,拖动和双击最大化等功能
- QT 实现无边框拖动
- Java JFrame实现无边框无标题
- 实现无边框窗体的拖动及窗体大小变化
- Pyqt实现无边框窗口拖动及改变窗口大小
- WinForm无边框窗体实现双击缩放及拖动
- Qt无边框窗口实现拖动和改变大小(修改)
- winForm实现拖动无边框窗体
- C# 实现拖动无边框窗体
- 实现无边框时拖动窗口
- C#实现无边框窗体拖动
- QT实现无边框拖动界面
- C# 无边框窗口实现拖动
- WinForm 无边框窗口 拖动实现
- C# 实现无边框窗口拖动
- C#实现无边框窗体拖动
- 记录一次并未读源码调试程序的经历
- Android中View的事件体系(1)——坐标体系与移动
- 初试ASP.NET5 & MVC6 发布错误
- 八大排序算法之直接插入排序
- iOS 中UIAlertView 的简单使用
- JFrame实现无边框 及 实现拖动和Button关闭功能
- 采集侠的自动crontab脚本
- Android设计模式应用-桥接模式
- HDU - 5655 CA Loves Stick
- Bit manipulation
- Linux Shell笔记
- C#的数据类型简介
- 杭电2700
- JavaScript编写人机对战五子棋(二)