我希望将图像淡入到作为卡片布局一部分的面板上。当我在程序中的某个位置时,此面板将显示在顶部,然后我希望以淡入效果加载图像。 这是一个很大的项目,所以我只会粘贴相关的代码。
我有一个GUI类,其中包含jFrame,所有jPanel等。当触发某个事件时,此代码运行:
cardMain.show(pMain, "cLeprechaun");
FadeIn.run(pLeprechaun);
它加载正确的面板,然后在FadeIn类中运行一个静态方法,该方法应该将图像添加到面板pLeprechaun上。
这是FadeIn类:
import java.awt.AlphaComposite;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class FadeIn extends JPanel implements ActionListener {
Image imagem;
Timer timer;
private float alpha = 0f;
public FadeIn() {
imagem = new ImageIcon("darkforest.jpg").getImage();
timer = new Timer(100, this);
timer.start();
}
// here you define alpha 0f to 1f
public FadeIn(float alpha) {
imagem = new ImageIcon("darkforest.jpg").getImage();
this.alpha = alpha;
}
@Override
public void paintComponent(Graphics g) {
System.out.println("paint");
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
alpha));
g2d.drawImage(imagem, 0, 0, null);
}
public static void run(JPanel jPanel) {
jPanel.add(new FadeIn());
}
public void actionPerformed(ActionEvent e) {
alpha += 0.05f;
if (alpha >1) {
alpha = 1;
timer.stop();
}
repaint();
}
}
没有任何反应,面板上没有显示图像。只是尝试一下,而不是jPanel.add(new FadeIn());我还尝试创建一个新的jFrame并在其上添加一个新的FadeIn,然后就可以了。当然,不是在jPanel上绘制图像,而是在主视图上弹出一个新的jFrame,图像很好地淡入。但这不是我想要发生的事情。
有没有办法解决这个问题?
答案 0 :(得分:0)
呃去:
假设您有以下呼叫序列:
JFrame f=new JFrame();
f.setSize(500, 500);
JPanel j=new JPanel();
f.add(j);
f.setVisible(true);
FadeIn.run(j);
您需要更改大小,如下所示:
public FadeIn(Dimension d) {
setSize(d);
.... // the rest of set up
}
然后在跑步中:
run(Jpanel jPanel) {
jPanel.add(new FadeIn(jPanel.getSize()));
}