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