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