使用Java Swing设计: 1.创建一个背景色为白色的窗口; 2.去掉窗口边框默认样式,且鼠标可以拖动窗口; 3.在窗口最上方添加自定义的白色标题栏; 4.标题栏最右侧有最小化按钮,最大化按钮,关闭按钮,全部为白色;
时间: 2024-04-16 20:28:15 浏览: 119
你可以使用以下代码来实现你的需求:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class CustomWindow extends JFrame {
private JPanel titleBarPanel;
private JButton minimizeButton;
private JButton maximizeButton;
private JButton closeButton;
private int mouseX, mouseY;
public CustomWindow() {
setLayout(null); // 自定义布局
setSize(400, 300);
setLocationRelativeTo(null); // 居中显示
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 创建标题栏面板
titleBarPanel = new JPanel();
titleBarPanel.setBackground(Color.WHITE);
titleBarPanel.setBounds(0, 0, getWidth(), 30);
titleBarPanel.setLayout(null);
// 添加最小化按钮
minimizeButton = new JButton("-");
minimizeButton.setBounds(getWidth() - 90, 0, 30, 30);
minimizeButton.setBackground(Color.WHITE);
minimizeButton.setFocusPainted(false);
minimizeButton.addActionListener(e -> setExtendedState(JFrame.ICONIFIED)); // 最小化窗口
titleBarPanel.add(minimizeButton);
// 添加最大化按钮
maximizeButton = new JButton("+");
maximizeButton.setBounds(getWidth() - 60, 0, 30, 30);
maximizeButton.setBackground(Color.WHITE);
maximizeButton.setFocusPainted(false);
maximizeButton.addActionListener(e -> {
if (getExtendedState() == JFrame.MAXIMIZED_BOTH) {
setExtendedState(JFrame.NORMAL); // 还原窗口大小
} else {
setExtendedState(JFrame.MAXIMIZED_BOTH); // 最大化窗口
}
});
titleBarPanel.add(maximizeButton);
// 添加关闭按钮
closeButton = new JButton("X");
closeButton.setBounds(getWidth() - 30, 0, 30, 30);
closeButton.setBackground(Color.WHITE);
closeButton.setFocusPainted(false);
closeButton.addActionListener(e -> System.exit(0)); // 终止程序
titleBarPanel.add(closeButton);
// 标题栏鼠标拖动事件
titleBarPanel.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
mouseX = e.getX();
mouseY = e.getY();
}
});
titleBarPanel.addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
int x = e.getXOnScreen() - mouseX;
int y = e.getYOnScreen() - mouseY;
setLocation(x, y);
}
});
// 将标题栏面板添加到窗口中
getContentPane().add(titleBarPanel);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
CustomWindow window = new CustomWindow();
window.getContentPane().setBackground(Color.WHITE); // 设置窗口背景色为白色
window.setUndecorated(true); // 去掉窗口边框默认样式
});
}
}
```
在这个示例中,我们首先创建了一个继承自 JFrame 的 CustomWindow 类。然后我们使用 `setLayout(null)` 来自定义布局,并设置窗口大小和位置。
接下来,我们创建了一个标题栏面板 titleBarPanel,并设置其背景色为白色。然后我们分别创建了最小化、最大化和关闭按钮,并设置它们的位置、大小和背景色为白色。最后,我们添加了鼠标拖动标题栏的事件监听器,实现窗口的拖动效果。
在 `main` 方法中,我们创建了一个 CustomWindow 对象,并设置窗口背景色为白色,然后使用 `setUndecorated(true)` 来去掉窗口边框默认样式。
希望这个示例能满足你的需求!
阅读全文