65.9K
CodeProject 正在变化。 阅读更多。
Home

动态更改按钮图像

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.33/5 (9投票s)

2006年4月14日

CPOL

2分钟阅读

viewsIcon

47968

downloadIcon

347

在 Java 中创建一个类似 Flash 的按钮。

图 1.1 我的简单窗口

引言

我喜欢 Flash 按钮,因为可以根据情况轻松更改按钮的属性,例如鼠标悬停或鼠标单击。在 Java 中也可以轻松实现这一点。

许多人使用这些方法在 JButton 中加载不同的图形:setIcon(icon)setRolloverIcon(icon)setPressedIcon(icon)。对我来说,这可行,但效率不高。我将向您展示如何使用 Java Graphics 在运行时处理图像。

Java Swing 是一种用于桌面应用程序的技术。如果使用得当,它可以加速您上传的图像。我不会在这里介绍硬件加速图像,因为我认为您可以在 Google 上搜索相关信息。

图 2.1 状态

如您所见,按钮的初始状态略带透明。当您将鼠标悬停在其上时,图像将变得更加可见。单击时,图像将沿 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.

© . All rights reserved.