希望这个问题可以更多地强调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的反应方式。这是真的吗?