Swing绘制渐变按钮

昨天从图书馆借了一本《Java动画、图形和极富客户端效果开发》,作者为Sun公司的Java SE组客户端架构师,看了几页感觉获益匪浅。内容涉及Swing的渲染原理,一些图像的滤镜实现算法(例如方框模糊和高斯模糊),以及特效(比如类似OSX的倒影风格)的原理,都十分有意义,对接下来的图形研究很有帮助,若能精读此书,相信都可以写一个简单的图像处理软件出来了。

尝试了里面提到一个十分简单的渐变按钮,效果不错,代码如下:

package cn.vifix.uilab;
 
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
 
import javax.swing.JButton;
 
public class GradientButton extends JButton
{
	public GradientButton(String text)
	{
		super(text);
		setContentAreaFilled(false);
	}
 
	protected void paintComponent(Graphics g)
	{
		Graphics2D g2 = (Graphics2D) g;
 
		GradientPaint p = new GradientPaint(0,0,
				new Color(0xFFFFFF), 0, getHeight(), new Color(0xEEEEE));
 
		Paint oldPaint = g2.getPaint();
 
		g2.setPaint(p);
		g2.fillRect(0,0,getWidth(),getHeight());
 
		g2.setPaint(oldPaint);
 
		super.paintComponent(g);
 
	}
}

测试用代码:

package cn.vifix.uilab;
 
import javax.swing.JFrame;
 
public class GradientButtonTest extends JFrame
{
	public static void main(String[] args)
	{
		GradientButtonTest test = new GradientButtonTest();
		test.setTitle("Gradient Button Test");
		GradientButton button = new GradientButton("test");
		test.add(button);
		test.setSize(300, 60);
		test.setVisible(true);
	}
}

9 Responses

Leave a Comment

(Necessary)

(Necessary, will not be published)

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.