package publicway;
|
|
import javax.swing.*;
|
import java.awt.*;
|
import java.awt.event.ActionListener;
|
import java.awt.geom.RoundRectangle2D;
|
|
/**
|
* 返回按钮工具类
|
* 提供统一的返回按钮创建方法,左侧显示"返回"文字,右侧显示图标
|
*/
|
public final class Fanhuibutton {
|
|
// 按钮固定尺寸
|
private static final Dimension BUTTON_SIZE = new Dimension(150, 30);
|
// 圆角半径
|
private static final int CORNER_RADIUS = 8;
|
// 主色调 (绿色)
|
private static final Color BASE_COLOR = new Color(46, 139, 87);
|
|
private Fanhuibutton() {
|
// 工具类不需要实例化
|
}
|
|
/**
|
* 创建返回按钮
|
* 样式参考 buttonset,显示 "返回 >>"
|
*
|
* @param listener 按钮点击事件监听器
|
* @return 配置好的返回按钮
|
*/
|
public static JButton createReturnButton(ActionListener listener) {
|
// 创建自定义绘制的按钮
|
JButton returnButton = new JButton("返回 >>") {
|
private static final long serialVersionUID = 1L;
|
|
@Override
|
protected void paintComponent(Graphics g) {
|
Graphics2D g2 = (Graphics2D) g.create();
|
// 开启抗锯齿
|
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
|
// 获取按钮状态
|
boolean isPressed = getModel().isPressed();
|
boolean isRollover = getModel().isRollover();
|
int w = getWidth();
|
int h = getHeight();
|
|
// 计算当前背景色
|
if (isPressed) {
|
g2.setColor(BASE_COLOR.darker());
|
} else if (isRollover) {
|
g2.setColor(new Color(BASE_COLOR.getRed(), BASE_COLOR.getGreen(), BASE_COLOR.getBlue(), 220));
|
} else {
|
g2.setColor(BASE_COLOR);
|
}
|
|
// 绘制圆角矩形背景
|
g2.fill(new RoundRectangle2D.Double(0, 0, w, h, CORNER_RADIUS, CORNER_RADIUS));
|
|
// 绘制文字
|
g2.setColor(Color.WHITE);
|
g2.setFont(getFont());
|
FontMetrics fm = g2.getFontMetrics();
|
|
// 文字居中
|
String text = getText();
|
int textX = (w - fm.stringWidth(text)) / 2;
|
int textY = (h - fm.getHeight()) / 2 + fm.getAscent();
|
|
g2.drawString(text, textX, textY);
|
|
g2.dispose();
|
}
|
};
|
|
// 设置按钮样式属性
|
returnButton.setFont(new Font("微软雅黑", Font.BOLD, 14));
|
returnButton.setForeground(Color.WHITE);
|
returnButton.setFocusPainted(false);
|
returnButton.setContentAreaFilled(false);
|
returnButton.setBorderPainted(false);
|
returnButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
|
|
// 设置固定大小
|
returnButton.setPreferredSize(BUTTON_SIZE);
|
returnButton.setMinimumSize(BUTTON_SIZE);
|
returnButton.setMaximumSize(BUTTON_SIZE);
|
|
// 添加点击事件
|
if (listener != null) {
|
returnButton.addActionListener(listener);
|
}
|
|
return returnButton;
|
}
|
}
|