📄 imagebutton.java
字号:
/*
* 文件: ImageButton.java
* 日期 作者 改变情况
* 2004-9-1 Dorian 创建
*/
package com.javaworld.dorian;
import java.awt.AlphaComposite;
import java.awt.Composite;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.Image;
import java.awt.Transparency;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
/**
* <p>带图标按钮类</p>
* <P>---------------------------------------------------------
* <p>可提供ImageIcon参数改变按钮图标。提供参数时可提供图标透明化
* 的程度(THIRD_TRANSPARENCY、TRANSLUCENCE、TOWPART_TRANSPARENCY、
* OPACITY)
* <p>For Example:
* <p> JFrame frame = new JFrame();
* <p> frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
* <p> frame.setSize(250, 300);
* <p> frame.setTitle("图片按钮测试");
* <P> JButton button = ImageButton.createButton(ImageIcon);
* <p> button.setFocusable(false);
* <p> frame.getContentPane().add(button);
* <P> panel.add(button);
* <p> frame.setVisible(true);
* <P>---------------------------------------------------------
* <P>Copyright (c) 2004 Dorian. All rights reserved</p>
* <P>(#)ImageButton.java</p>
* <P>创建日期 2004-9-1</p>
* <P>更新日期 2004-9-1</p>
* <p>@author <a href="mailto:Dorian@citiz.net">Dorian</a></p>
* @version 1.0.0</p>
*/
public class ImageButton {
/**
* ImageButton的构造函数,声明为Private
* 使其不能被实例化。
*/
private ImageButton() {}
/**
* 创建带一个图片的按钮
* @param iconName -
* @return JButton - 带此图片的按钮
*/
public static JButton createButton(String iconName) {
ImageIcon icon = getImageIcon(iconName);
return createButton(icon);
}
/**
* 创建带一个图片的按钮
* @param rolloverIcon - 按钮的ImageIcon
* @return JButton - 带此图片的按钮
*/
public static JButton createButton(ImageIcon rolloverIcon) {
return createButton(null,rolloverIcon,0);
}
/**
* 创建带一个图片的按钮并指定透明类型
* @param rolloverIcon - 按钮的ImageIcon
* @param alpha - alpha值(按钮的透明形式),可取本类的常量值
* @return JButton - 带此图片的按钮
*/
public static JButton createButton(ImageIcon rolloverIcon,float alpha) {
return createButton(null,rolloverIcon,alpha);
}
/**
* 创建带两个图片的按钮
* @param defaultIcon - 按钮的一般ImageIcon
* @param rolloverIcon - 鼠标滑过按钮时的ImageIcon
* @param alpha - alpha值(按钮的透明形式),可取本类的常量值
* @return - 带此图片的按钮
*/
public static JButton createButton(ImageIcon defaultIcon,ImageIcon rolloverIcon) {
return createButton(defaultIcon,rolloverIcon,null,0);
}
/**
* 创建带两个图片的按钮
* @param defaultIcon - 按钮的一般ImageIcon
* @param rolloverIcon - 鼠标滑过按钮时的ImageIcon
* @param alpha - alpha值(按钮的透明形式),可取本类的常量值
* @return - 带此图片的按钮
*/
public static JButton createButton(ImageIcon defaultIcon,ImageIcon rolloverIcon,
float alpha) {
return createButton(defaultIcon,rolloverIcon,null,alpha);
}
/**
* 创建带的三个图片的按钮
* @param defaultIcon - 按钮的一般ImageIcon
* @param rolloverIcon - 鼠标滑过按钮时的ImageIcon
* @param pressedIcon - 鼠标按下按钮时的ImageIcon
* @return - 带此图片的按钮
*/
public static JButton createButton(ImageIcon defaultIcon,ImageIcon rolloverIcon,
ImageIcon pressedIcon) {
return initButton(defaultIcon,rolloverIcon,pressedIcon,0,null);
}
/**
* 创建带的三个图片的按钮
* @param defaultIcon - 按钮的一般ImageIcon
* @param rolloverIcon - 鼠标滑过按钮时的ImageIcon
* @param pressedIcon - 鼠标按下按钮时的ImageIcon
* @param alpha - alpha值(按钮的透明形式),可取本类的常量值
* @return - 带此图片的按钮
*/
public static JButton createButton(ImageIcon defaultIcon,ImageIcon rolloverIcon,
ImageIcon pressedIcon,float alpha) {
return initButton(defaultIcon,rolloverIcon,pressedIcon,alpha,null);
}
/**
* 初始化图片按钮
*/
private static JButton initButton(ImageIcon defaultIcon,ImageIcon rolloverIcon,
ImageIcon pressedIcon,float alpha,String text) {
//获取鼠标滑过按钮的宽和高(供转换图片时之用)
int width = rolloverIcon.getIconWidth();
int height = rolloverIcon.getIconHeight();
//如果alpha值为0,则设置alpha值为半透明
if(alpha == 0)
alpha = ImageButton.TRANSLUCENCE;
//如果一般按钮或鼠标压下按钮的ImageIcon为Null
//则转换鼠标滑过按钮的图片,赋值给这两个为Null的图片
if(defaultIcon == null)
defaultIcon = getImageIcon(rolloverIcon,width,height,0,0,alpha);
if(pressedIcon == null)
pressedIcon = getImageIcon(rolloverIcon,width,height,2,2,ImageButton.OPACITY);
//创建带图片的JButton
JButton button;
if(text == null)
button = new JButton();
else
button = new JButton(text);
button.setIgnoreRepaint(true); //忽略重绘
button.setBorder(null); //不绘制边框
button.setContentAreaFilled(false); //不绘制背景
button.setIcon(defaultIcon); //设置按钮默认时的图片
button.setRolloverIcon(rolloverIcon); //设置鼠标滑过按钮时的图片
button.setPressedIcon(pressedIcon); //设置鼠标按下按钮时的图片
return button;
}
/**
* 转换图片并返回ImageIcon
*/
private static ImageIcon getImageIcon(ImageIcon defaultIcon,int width,
int height,int x,int y,float alpha) {
JFrame frame = new JFrame();
//得到窗体的图形配置,并创建兼容的图片
GraphicsConfiguration gc = frame.getGraphicsConfiguration();
Image image = gc.createCompatibleImage(width,height,Transparency.TRANSLUCENT);
//转换图片的透明值和位置
Graphics2D g2D = (Graphics2D)image.getGraphics();
if(alpha > 0) {
Composite alphaTemp = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,alpha);
g2D.setComposite(alphaTemp);
}
g2D.drawImage(defaultIcon.getImage(),x,y,null);
g2D.dispose();
return new ImageIcon(image);
}
/**
* 获取自带(各个常量值)的图片并返回ImageIcon
*/
private static ImageIcon getImageIcon(String fileName) {
fileName = "images/" + fileName + ".png";
return new ImageIcon(ImageButton.class.getResource(fileName));
}
//ImageButton 的各个常量
public static final float THIRD_TRANSPARENCY = 0.3f; //3/1透明
public static final float TRANSLUCENCE = 0.5f; //半透明
public static final float TOWPART_TRANSPARENCY = 0.8f; //3/2透明
public static final float OPACITY = -1f; //不透明
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -