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

java swing 自定义标题栏及拖动

程序员文章站 2022-07-13 23:02:33
...

不废话,说正事。

1.要实现自定义标题栏,首先要隐藏默认的标题栏,代码如下:

frame.setUndecorated(true); // 隐藏窗口标题栏

2.接下来自己设计一个标题栏,个人简易版代码如下:

	/**
	 * 自定义标题栏
	 * @return
	 */
	public static JPanel getCustomTitle(JFrame frame) {
		JPanel titlePanel = new JPanel();
		titlePanel.setLayout(new FlowLayout(FlowLayout.RIGHT));// 右对齐
		titlePanel.add(new JLabel("自定义标题"));
		titlePanel.setBackground(Color.lightGray);
		JButton closeBtn = new JButton("X");
		JButton minBtn = new JButton("一");
		//关闭按钮监听
		closeBtn.addActionListener(e -> {
			frame.dispose();
        });
        //最小化按钮监听
		minBtn.addActionListener(e -> {
			frame.setExtendedState(JFrame.ICONIFIED);
        });
		titlePanel.add(minBtn);
		titlePanel.add(closeBtn);
		return titlePanel;
	}

java swing 自定义标题栏及拖动

3.实现拖动功能。有默认标题栏的时候,窗口是可以拖动的,自定义标题栏后,窗口拖不动了,需要给窗口加一个拖动的监听事件,代码如下:

public class MouseDraggedListener extends MouseAdapter{

	//这两组x和y为鼠标点下时在屏幕的位置和拖动时所在的位置
	int newX,newY,oldX,oldY;
	//这两个坐标为组件当前的坐标
	int startX,startY;

	@Override
	public void mousePressed(MouseEvent e) {
		//此为得到事件源组件
		Component cp = (Component)e.getSource();
		//当鼠标点下的时候记录组件当前的坐标与鼠标当前在屏幕的位置
		startX = cp.getX();
		startY = cp.getY();
		oldX = e.getXOnScreen();
		oldY = e.getYOnScreen();
	}
	@Override
	public void mouseDragged(MouseEvent e) {
		Component cp = (Component)e.getSource();
		//拖动的时候记录新坐标
		newX = e.getXOnScreen();
		newY = e.getYOnScreen();
		//设置bounds,将点下时记录的组件开始坐标与鼠标拖动的距离相加
		cp.setBounds(startX+(newX - oldX), startY+(newY - oldY), cp.getWidth(),             
        cp.getHeight());
	}
}

4.准备工作都做好了,最后是整体的调用,代码如下:

	public static void main(String[] args) {
		JFrame frame = new JFrame();
		
		frame.setSize(500, 350);// 宽度、高度
		frame.setLocationRelativeTo(null); // 窗口居中
		frame.setUndecorated(true); // 隐藏窗口标题栏
		
		frame.getContentPane().setLayout(new BorderLayout());
		frame.getContentPane().add(getCustomTitle(frame), BorderLayout.NORTH);// 添加自定义的标题栏
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// 鼠标拖动事件
		MouseDraggedListener m = new MouseDraggedListener();
		frame.addMouseListener(m);
		frame.addMouseMotionListener(m);
	}

OK,下课。

相关标签: Swing swing java