Java中如何创建未装饰的框架?

此代码为您提供了一个示例,说明如何创建没有标题栏和框架图标(例如最大化,最小化和关闭)的框架。

package org.nhooo.example.swing;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

public class UndecoratedFrame {
    private static Point point = new Point();

    public static void main(String[] args) {
        final JFrame frame = new JFrame();

        //禁用或启用此框架的装饰。通过设置未装饰
        // 设置为true将会删除框架的标题栏,包括最大化,
        // 最小化和关闭图标。
        frame.setUndecorated(true);

        // 随着框架标题栏的移除,我们需要关闭框架
        // 使用我们自己的按钮实例。
        JButton button = new JButton("Close Me");
        button.addActionListener(e -> System.exit(0));

        // 我们在此处添加的鼠标侦听器和鼠标动作侦听器只是为了
        // 使我们的框架可拖动。
        frame.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                point.x = e.getX();
                point.y = e.getY();
            }
        });

        frame.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseDragged(MouseEvent e) {
                Point p = frame.getLocation();
                frame.setLocation(p.x + e.getX() - point.x, p.y + e.getY() - point.y);
            }
        });

        frame.setSize(300, 300);
        frame.setLocation(200, 200);
        frame.setLayout(new BorderLayout());

        frame.getContentPane().add(button, BorderLayout.NORTH);
        frame.getContentPane().add(new JLabel("Drag Me", JLabel.CENTER), 
            BorderLayout.CENTER);
        frame.setVisible(true);
    }
}