代码存在问题:1.窗口边框默认样式没有去掉;2.按钮内全部显示“...”
时间: 2024-01-03 17:02:45 浏览: 74
非常抱歉,我之前的回答有误。以下是修正后的代码,它可以解决你提到的问题:
```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);
setUndecorated(true); // 去掉窗口边框默认样式
// 创建标题栏面板
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); // 设置窗口背景色为白色
});
}
}
```
这个修正后的代码在 `main` 方法中使用了 `setUndecorated(true)` 来去掉窗口边框默认样式。此外,为了解决按钮内显示 "..." 的问题,你可以将按钮的宽度调整得更大,以容纳按钮上的文本。例如,将按钮的宽度调整为 40:
```java
// 添加最小化按钮
minimizeButton = new JButton("-");
minimizeButton.setBounds(getWidth() - 90, 0, 40, 30);
// ...
// 添加最大化按钮
maximizeButton = new JButton("+");
maximizeButton.setBounds(getWidth() - 60, 0, 40, 30);
// ...
// 添加关闭按钮
closeButton = new JButton("X");
closeButton.setBounds(getWidth() - 30, 0, 40, 30);
// ...
```
现在,按钮的文本应该能够完全显示出来了。希望这次能满足你的需求!
阅读全文