Jlabel与图像淡出奇怪的效果

时间:2011-08-08 07:16:09

标签: java image animation jlabel fadeout

希望这个问题可以更多地强调Jlabel(swing)的淡出效果。

当然,是的......我已经按照This Link Thread给出了一些指南和一些答案,但我的情况有点不同。它不仅仅是JLabel中的一个文本,还有一个我放的图像。

我继续关注Thread Located out of stackoverflow。然而,它给了我一个淡出效果。但是发生了可怕的事情; 白色背景。

如何解决这个问题?

我在这里分享界面...... First screenshot taken here是淡出尚未发生的早期阶段。而, Second screenshot taken here是我提到的不需要的结果。

Tobe老实说,我使用 Trident Library 进行动画制作; 因此,每当用户点击图像时,它将执行此代码;

Timeline tm = new Timeline(jll_btnProceed);
tm.addPropertyToInterpolate("intensity", 1.0f, 0.0f);
tm.setDuration(1000);
tm.play();

和... JLabel本身,我曾经使用这个源代码覆盖它;

/**
 *
 * @author Gumuruh
 */

public class JLabelFader extends JLabel {

    private float intensity = 1.0f;

    public void setIntensity(float intensity) {
        this.intensity = intensity;
        this.setOpaque(false);
        repaint();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        final Composite oldComposite = g2.getComposite();
        g2.setComposite(AlphaComposite.SrcOver);
        final Color c = getBackground();
        final Color color = new Color(c.getRed(), c.getGreen(), c.getBlue(), (int) (255 * (1.0f - intensity)));
        g2.setColor(color);
        g2.fillRect(0, 0, getWidth(), getHeight());
        g2.setComposite(oldComposite);
    }
}

我的手和我的头不能停下来让这个结果彻底解决。因此,我尝试从 Java Filthy Rich Client电子书中跟进一些示例,然后应用下面给出的源代码,但首先我需要评论 protected void paint(Graphic g)上面写的方法,只需添加此源代码;

private BufferedImage buttonImage = null;

    public void paint(Graphics g) {

        // Create an image for the button graphics if necessary
        if (buttonImage == null || buttonImage.getWidth() != getWidth()
                || buttonImage.getHeight() != getHeight()) {
            buttonImage = getGraphicsConfiguration().
                    createCompatibleImage(getWidth(), getHeight());
        }
        Graphics gButton = buttonImage.getGraphics();
        gButton.setClip(g.getClip());

        //  Have the superclass render the button for us
        super.paint(gButton);

        // Make the graphics object sent to this paint() method translucent
        Graphics2D g2d = (Graphics2D) g;
        AlphaComposite newComposite =
                AlphaComposite.getInstance(AlphaComposite.SRC_OVER, intensity);
        g2d.setComposite(newComposite);

        // Copy the button's image to the destination graphics, translucently
        g2d.drawImage(buttonImage, 0, 0, null);

    }

最后...给我很好的淡出效果。但首先,它给了我第二个可怕的效果,这是 BLACK BACKGROUND 首先呈现的。不能相信我吗?好的,这是First screen shot AFTER applying code from ebook。这是the nice fade out effect result

如果有人告诉我的话; " 您的PNG不透明!"。 请不要这样说。因为,我遵循了creation of PNG inside the Photoshop nicely using this Tut

现在,我的脑袋旋了一下,但是我的心笑了,无法处理它。我的天啊。 Geeezzz ....!

新故事开始...... *从此处及以下更新*

嗯,非常感谢你的朋友叫... MKorbel, 来自his thread given at this link。提供一个淡出效果的明显例子Swing JButton和我试图将它实现到我的JLabel中,并且中提琴...... !! 有用。 让我们为 MKorbel 做一个大鼓掌。 :d

无论如何,我怎么能修复早期的代码?非常简单,只需注释Paint()方法,再次使用paintComponent()方法,它应该是覆盖和新的源代码下面;

@Override
    public void paintComponent(java.awt.Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, intensity));
        if (rectangularLAF && isBackgroundSet()) {
            Color c = getBackground();
            g2.setColor(c);
            g.fillRect(0, 0, getWidth(), getHeight());
        }
        super.paintComponent(g2);
        g2.dispose();
    }

现在,JLabel的强度可变变得容易改变。 淡出和淡入完成。

好。 现在一切似乎" OKAY "。抱着片刻,这里有一些奇怪的事情发生了。你注意到了吗?嗯.... 我试图将鼠标事件(悬停在)添加到 JLabel 中,我们覆盖前面讨论的 paintComponent()方法。使用此行码;

myJLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));

逻辑上,它应该在悬停ON时更改光标。但是,这里出现了另一个奇怪的影响。 (真的很遗憾,但这是主要案例的继续)。现在奇怪的效果是当我们悬停在Jlabel上时鼠标光标无法更改。它仍然无法改变Cursor。 似乎paintComponent()方法影响 Cursor的反应方式。这是真的吗?

0 个答案:

没有答案