动态更改按钮图像
在 Java 中创建一个类似 Flash 的按钮。
引言
我喜欢 Flash 按钮,因为可以根据情况轻松更改按钮的属性,例如鼠标悬停或鼠标单击。在 Java 中也可以轻松实现这一点。
许多人使用这些方法在 JButton
中加载不同的图形:setIcon(icon)
、setRolloverIcon(icon)
和 setPressedIcon(icon)
。对我来说,这可行,但效率不高。我将向您展示如何使用 Java Graphics
在运行时处理图像。
Java Swing 是一种用于桌面应用程序的技术。如果使用得当,它可以加速您上传的图像。我不会在这里介绍硬件加速图像,因为我认为您可以在 Google 上搜索相关信息。
如您所见,按钮的初始状态略带透明。当您将鼠标悬停在其上时,图像将变得更加可见。单击时,图像将沿 x=1px 和 y=1px 移动。
使用代码
与本文一起包含的类名为 MouseOverButton
。
MouseOverButton
类中最重要的方法是 JButton createButton(String pathName, String toolTip)
和 BufferedImage createCompatibleImage(int w, int h, int transparancy)
。
方法 createCompatibleImage(w,h, transparency)
返回一个 BufferedImage
,该图像支持指定的透明度,并且具有与此 GraphicsConfiguration
兼容的数据布局和颜色模型。
/**
Creates an image compatible with the current display.
*/
public BufferedImage createCompatibleImage(int w, int h, int transparancy)
{
GraphicsConfiguration gc = getGraphicsConfiguration();
return gc.createCompatibleImage(w, h, transparancy);
}
我们将创建三个图像。第一个图像是我们加载的图像。当鼠标光标悬停在图像上时,使用此图像。
第二个图像创建半透明的默认图像。这是初始状态下的图像。
Image image = createCompatibleImage(w, h, Transparency.TRANSLUCENT);
Graphics2D g = (Graphics2D)image.getGraphics();
Composite alpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .5f);
g.setComposite(alpha);
//drawImage(image, x, y, image to be notified)
g.drawImage(imageRollover.getImage(), 0,0, null);
g.dispose();
ImageIcon iconDefault = new ImageIcon(image);
我们将 alpha 设置为 0.5,即图像总可见度的 50%(如果 alpha=1.0f,则图像完全可见)。然后,在屏幕上绘制图像之前,设置图像的合成模式。
第三个图像完全可见。我们将通过设置 x=1 和 y=1(将图像偏移几个像素)来绘制图像,以便产生按钮被按下的效果。
//make a pressed image
image = createCompatibleImage(w, h, Transparency.TRANSLUCENT);
g = (Graphics2D)image.getGraphics();
g.drawImage(imageRollover.getImage(),1,1, null);
g.dispose();
ImageIcon iconPressed = new ImageIcon(image);
结论
我想我已经告诉了您关于我的程序的所有内容。剩下的内容不言自明,或者您可以在 Java 文档中阅读相关信息,因为所有内容都很简单。如果您有任何疑问或认为我需要更详细地说明,请随时与我联系。
您可以更具创造力;您可以使用它来使您的程序更具交互性并使其看起来很酷。
免责声明
我在此教程中使用的图像是从 CodeProject 本身下载的。
参考
Brackeen, D. (2004). Developing Games in Java. New Riders Publishing.