?? imagebutton.java
字號:
/*
* 文件: ImageButton.java
* 日期 作者 改變情況
* 2004-9-1 Dorian 創(chuàng)建
*/
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參數(shù)改變按鈕圖標。提供參數(shù)時可提供圖標透明化
* 的程度(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>創(chuàng)建日期 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的構造函數(shù),聲明為Private
* 使其不能被實例化。
*/
private ImageButton() {}
/**
* 創(chuàng)建帶一個圖片的按鈕
* @param iconName -
* @return JButton - 帶此圖片的按鈕
*/
public static JButton createButton(String iconName) {
ImageIcon icon = getImageIcon(iconName);
return createButton(icon);
}
/**
* 創(chuàng)建帶一個圖片的按鈕
* @param rolloverIcon - 按鈕的ImageIcon
* @return JButton - 帶此圖片的按鈕
*/
public static JButton createButton(ImageIcon rolloverIcon) {
return createButton(null,rolloverIcon,0);
}
/**
* 創(chuàng)建帶一個圖片的按鈕并指定透明類型
* @param rolloverIcon - 按鈕的ImageIcon
* @param alpha - alpha值(按鈕的透明形式),可取本類的常量值
* @return JButton - 帶此圖片的按鈕
*/
public static JButton createButton(ImageIcon rolloverIcon,float alpha) {
return createButton(null,rolloverIcon,alpha);
}
/**
* 創(chuàng)建帶兩個圖片的按鈕
* @param defaultIcon - 按鈕的一般ImageIcon
* @param rolloverIcon - 鼠標滑過按鈕時的ImageIcon
* @param alpha - alpha值(按鈕的透明形式),可取本類的常量值
* @return - 帶此圖片的按鈕
*/
public static JButton createButton(ImageIcon defaultIcon,ImageIcon rolloverIcon) {
return createButton(defaultIcon,rolloverIcon,null,0);
}
/**
* 創(chuàng)建帶兩個圖片的按鈕
* @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);
}
/**
* 創(chuàng)建帶的三個圖片的按鈕
* @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);
}
/**
* 創(chuàng)建帶的三個圖片的按鈕
* @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);
//創(chuàng)建帶圖片的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();
//得到窗體的圖形配置,并創(chuàng)建兼容的圖片
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 + -