JButton 式样自定义

时间:2025-03-19 14:39:31
public class MyButton extends JButton { private float alpha = 1f; // 底色的透明度,默认为不透明 private int isMouseEntered = 1;// 鼠标是否进入按钮 public MyButton() { initStyle(); } public MyButton(String buttonText) { super(buttonText); initStyle(); //添加鼠标监听 addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { //当鼠标进入时,鼠标进入状态改为TRUE,并重绘按钮 isMouseEntered = 0; repaint(); super.mouseEntered(e); } @Override public void mouseExited(MouseEvent e) { isMouseEntered = 1; repaint(); } @Override public void mousePressed(MouseEvent arg0) { isMouseEntered = 2; repaint(); } @Override public void mouseReleased(MouseEvent e) { isMouseEntered = 0; repaint(); } }); } /** * 初始化按钮样式 */ private void initStyle() { //初始化透明按钮 setOpaque(false); setBorder(null); // setBorderPainted(false); setFocusable(false); setBackground(null); // setFocusPainted(false); setContentAreaFilled(false); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; // 绘制渐变底色 switch(isMouseEntered) { case 0: AlphaComposite composite = ( AlphaComposite.SRC_OVER, alpha); (composite); drawButtonBackground(g2, this, ("#E0F1FC"), ("#DEEBFE"), ("#D6E5F5"), ("#FFFFFF")); break; case 1: break; case 2: AlphaComposite composite1 = ( AlphaComposite.SRC_OVER, alpha); (composite1); // drawButtonBackground(g2, this, ("#D6E5F5"), ("#FFFFFF"), // ("#FFFFFF"), ("#D6E5F5")); drawButtonPressBackground(g2, this, ("#D6E5F5"), ("#EFF5FE"), ("#EFF5FE"), ("#D6E5F5")); default: break; } super.paintComponent(g); } private static void drawButtonBackground(Graphics2D g2, JToggleButton bt, Color c1, Color c2, Color c3, Color c4) { // 使平滑 (RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 造一个圆角区域 r2d = new (0, 0, () - 1, () - 1, 10, 10); Shape clip = (); (r2d); (clip); (("#afafaf")); (0, 0, () - 2, () - 1, 10, 10); // 渐变背景 (new GradientPaint(2, 2, c1, 1, () / 3, c2)); (2, 2, () - 5, () / 3, 10, 10); // 渐变二段 (new GradientPaint(1, () / 3, c3, 1, bt .getHeight(), c4)); (2, () / 3, () - 5, () / 3 * 2 - 1, 10, 10); // (); } private static void drawButtonPressBackground(Graphics2D g2, JToggleButton bt, Color c1, Color c2, Color c3, Color c4) { // 使平滑 (RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 造一个圆角区域 r2d = new (0, 0, () - 1, () - 1, 10, 10); Shape clip = (); (r2d); (clip); // 外边框 (0, 0, () - 2, () - 1, 10, 10); // 渐变背景 (new GradientPaint(1, ()/7, c1, 1, () / 3, c2)); (2, 2, () - 5, () / 3); // 渐变二段 (new GradientPaint(1, () / 3, c3, 1, bt .getHeight(), c4)); (2, () / 3, () - 5, () / 3 * 2 - 1); // 内边框 (("#afafaf")); (1, 1, () - 3, () - 2, 9, 9); (2, 2, () - 4, () - 3, 8, 8); (("#cfcfcf")); (2, 3, () - 4, () - 4, 8, 7); } }