动态更改按钮图像

图1.1我的简单窗口 介绍 我喜欢Flash按钮,因为您可以根据情况轻松地更改按钮的属性,比如鼠标移动或单击。您可以在Java中轻松地做到这一点。 许多人使用JButton中的这些方法加载不同的图形:setIcon(icon)、setRolloverIcon(icon)和setPressedIcon(icon)。对我来说,它是有效的,但不是很有效。我将向您展示如何在运行时使用Java图形处理映像。 Java Swing是一种桌面技术。如果使用得当,它可以对上传的图像进行硬件加速。我不会在这里介绍硬件加速的图像,因为我认为您可以了解它。 图2.1状态 可以看到,按钮的初始状态有点透明。当您将鼠标放在它上面时,图像将变得更加可见。当点击时,图像将移动x=1px和y=1px。 使用的代码 本文包含的类名为MouseOverButton。 MouseOverButton类中最重要的方法是JButton createButton(字符串路径名,字符串工具提示)和BufferedImage createCompatibleImage(int w, int h, int transparancy)。 方法createCompatibleImage(w,h, transparency)返回一个BufferedImage,该BufferedImage支持指定的透明度,并具有与此GraphicsConfiguration兼容的数据布局和颜色模型。 隐藏,复制Code

/**
       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);
    }

我们将制作三个图像。第一个图像是我们加载的图像。当鼠标光标在图像上时使用此图像。 第二个图像是半透明的默认图像。这是初始状态的像。 隐藏,复制Code

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(将图像偏移几个像素)来绘制图像,这样就会产生按钮被按下的效果。 隐藏,复制Code

//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)。用Java开发游戏。新车手出版。 本文转载于:http://www.diyabc.com/frontweb/news509.html

posted @ 2020-08-07 09:11  Dincat  阅读(264)  评论(0编辑  收藏  举报