Java 重写JButton 自定义按钮图片

Java 重写JButton 自定义按钮图片

在这里插入图片描述
在这里插入图片描述
实现这样的样式只用重写 JButton 封装起来可以复用
代码片.

package view;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;


public class ImageButton extends JButton implements MouseListener {

	/**
	 * 
	 */
	private String name;
	private JLabel image;
	private JLabel textPanel;
	private Boolean pressed = false;
	private Boolean entered = false;
	private Boolean enabled = true;
	private String modal = "";

	public ImageButton(String name) {
		this.name = name;
		this.image = new JLabel();
		textPanel = new JLabel();
		add(image);
		setLayout(null);
		setBorder(null);
		setOpaque(false);
		addMouseListener(this);
	}

	public ImageButton(String btnname, String text) {
		this(btnname);
		textPanel.setText(text);
		textPanel.setVerticalAlignment(JLabel.CENTER);
		textPanel.setHorizontalAlignment(JLabel.CENTER);
		textPanel.setForeground(Color.LIGHT_GRAY);
		add(textPanel);
	}

	public void mouseClicked(MouseEvent e) {
	}

	public void mouseEntered(MouseEvent e) {
		if (!enabled)
			return;
		entered = true;
		if (pressed) {
			setModal("pressed");
		} else {
			setModal("entered");
		}
	}

	public void mouseExited(MouseEvent e) {
		if (!enabled)
			return;
		entered = false;
		setModal("");
	}

	public void mousePressed(MouseEvent e) {
		if (!enabled)
			return;
		pressed = true;
		setModal("pressed");
	}

	public void mouseReleased(MouseEvent e) {
		if (!enabled)
			return;
		pressed = false;
		if (entered) {
			setModal("entered");
		} else {
			setModal("");
		}
	}

	public void setModal() {
		if (entered) {
			setModal("entered");
		} else {
			setModal("");
		}
	}

	public void setModal(String modal) {
		this.modal = modal;
		repaint();
	}

	public void setIBEnabled(Boolean isenabled) {
		enabled = isenabled;
		if (enabled) {
			setModal();
		} else {
			setModal("");
		}
	}

	public void setText(String text) {
		this.textPanel.setText(text);
	}

	@Override
	public void setForeground(Color fg) {
		super.setForeground(fg);
		if (textPanel != null)
			textPanel.setForeground(fg);
	}

	@Override
	public void setSize(int width, int height) {
		super.setSize(width, height);
		image.setSize(width, height);
		textPanel.setSize(width, height);
	}

	@Override
	public void setFont(Font font) {
		super.setFont(font);
		if (textPanel != null) {
			textPanel.setFont(font);
			textPanel.setSize(textPanel.getPreferredSize().width,
					textPanel.getHeight());
		}
	}

	@Override
	public void paint(Graphics g) {
		try {
			ImageIcon img = null;
			if ("".equals(modal)) {
				img = new ImageIcon(this.getClass().getResource(
						"/images/" + name + ".png"));
			} else {
				img = new ImageIcon(this.getClass().getResource(
						"/images/" + name + "_" + modal + ".png"));
			}
			if (img.getImage() != null)
				g.drawImage(img.getImage(),
						(getWidth() - img.getIconWidth()) / 2,
						(getHeight() - img.getIconHeight()) / 2, image);
		} catch (NullPointerException e) {
			// super.paint(g);  diange.png diange_entered.png  diange_pressed.png
		}
		if (textPanel != null) {
			g.setColor(Color.BLACK);
			g.setFont(textPanel.getFont());
			g.drawString(textPanel.getText(), (int) (getWidth() - textPanel
					.getPreferredSize().getWidth()) / 2 + 1,
					getHeight() / 2 + 7);
			textPanel.paint(g);
		}
	}
}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
三张图片就是按钮的三种情况

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值