java实现图形按钮

package common;


import java.awt.Dimension;
import java.awt.Image;
import java.awt.image.ColorModel;
import java.awt.image.PixelGrabber;


import javax.swing.ButtonModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;


public class ImageButton extends JButton{

/**本类为图片按钮,继承自JButton,除了构造方法以外的所有方法都和JButton相同
*/
//序列化版本号
private static final long serialVersionUID = 3490878168295783256L;

private Image mouseOnImage;
private boolean lock;

/**根据三个Image对象以及指定的宽度和高度,创建一个ImageButton对象
* @param exitedImage 鼠标不在按钮上时,按钮的显示图片
* @param enteredImage 鼠标在按钮上时,按钮的显示图片
* @param pressedImage 鼠标按下时,按钮的显示图片
* @param width,宽度
* @param height,高度
*/
public ImageButton(Image exitedImage, Image enteredImage, Image pressedImage, int width, int height){
//创建image的缩放版本,并指定给ImageIcon相应的属性
ImageIcon enteredImageIcon = new ImageIcon(enteredImage.getScaledInstance(width, height, Image.SCALE_SMOOTH));
ImageIcon exitedImageIcon = new ImageIcon(exitedImage.getScaledInstance(width, height, Image.SCALE_SMOOTH));
   ImageIcon pressedImageIcon = new ImageIcon(pressedImage.getScaledInstance(width, height, Image.SCALE_SMOOTH));
   mouseOnImage = exitedImageIcon.getImage();
//设置鼠标不在按钮上时的图标
   setIcon(exitedImageIcon);
   //设置鼠标移到按钮上时的图标
   setRolloverIcon(enteredImageIcon);
   //设置鼠标点击时的图标
   setPressedIcon(pressedImageIcon);
   //设置按钮的大小
   Dimension d = new Dimension(width, height);
setPreferredSize(d);
setSize(d);
// 是否显示外围矩形区域 选否
   setContentAreaFilled(false);
   //去掉按钮的聚焦框
   setFocusable(false);
   //去掉边框
   setBorderPainted(false);
   repaint();
}

/**根据三个ImageIcom对象以及指定的宽度和高度,创建一个ImageButton对象
* @param exitedImageIcon 鼠标不在按钮上时,按钮的显示Icon
* @param enteredImageIcon 鼠标在按钮上时,按钮的显示Icon
* @param pressedImageIcon 鼠标按下时,按钮的显示Icon
* @param width,宽度
* @param height,高度
*/
public ImageButton(ImageIcon exitedImageIcon, ImageIcon enteredImageIcon,
ImageIcon pressedImageIcon, int width, int height) {
this(exitedImageIcon.getImage(), enteredImageIcon.getImage(), pressedImageIcon.getImage(), width, height);
}

/**根据三个ImageIcom对象以及指定的宽度和高度,创建一个ImageButton对象
* @param exitedImageIcon 鼠标不在按钮上时,按钮的显示Icon
* @param enteredImageIcon 鼠标在按钮上时,按钮的显示Icon
* @param pressedImageIcon 鼠标按下时,按钮的显示Icon
* @param width,宽度
* @param height,高度
* @param text,文本
*/
public ImageButton(String text,ImageIcon exitedImageIcon, ImageIcon enteredImageIcon,
ImageIcon pressedImageIcon, int width, int height) {
this(exitedImageIcon, enteredImageIcon, pressedImageIcon, width, height);
setText(text);
}

/**根据三个图像名以及指定的宽度和高度,创建一个ImageButton对象
* @param exitedImageName 鼠标不在按钮上时,按钮的显示Icon名
* @param enteredImageName 鼠标在按钮上时,按钮的显示Icon名
* @param pressedImageName 鼠标按下时,按钮的显示Icon名
* @param width,宽度
* @param height,高度
*/
public ImageButton(String enteredImageName, String exitedImageName, 
          String pressedImageName, int width, int height){
this(new ImageIcon(enteredImageName), new ImageIcon(exitedImageName), new ImageIcon(pressedImageName), width, height);
}






public boolean isLock() {
return lock;
}


public void setLock(boolean loca) {
this.lock = loca;
}


/**判断点是否在按钮内
* @param x,x坐标
* @param y,y坐标
*/
public boolean contains(int x, int y) {
if (super.contains(x, y)){
if (!lock){
//创建存储点(x,y)所在的像素的数组
int[] pixels = new int[1];
int alpha = 0;
try {
//抓取缓冲区图像的像素到数组
PixelGrabber pg = new PixelGrabber(mouseOnImage, x, y, 1, 1, pixels, 0, 1);
pg.grabPixels();
//获得点(x,y)的alpha值
ColorModel cm = ColorModel.getRGBdefault();
alpha = cm.getAlpha(pixels[0]);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (alpha != 0){
if (getModel().isPressed()){
//鼠标在按钮上,并且左键被按下
mouseOnImage = ((ImageIcon)getPressedIcon()).getImage();
} else {
//鼠标在按钮上,并且左键没被按下
mouseOnImage = ((ImageIcon)getRolloverIcon()).getImage();
}
return true;
} else {
mouseOnImage = ((ImageIcon)getIcon()).getImage();
return false;
}
}
return true;
}
return false;
}
 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值