这是一个非常普遍的问题,但是我应该如何为 JPanel 添加动画背景。我希望背景位于所有面板组件和图形的后面。现在,我有两个单独的类(一个用于主面板,另一个用于背景)。背景类使用 repaint() 来动画网格在屏幕上移动。我试图使主面板背景透明,但这并没有让我有任何进展。
更多信息:
我的主面板是 CardLayout 的一部分,其中有许多不同的类。因此,当我将主面板添加到主框架时,我正在执行 frame.getContentPane().add(cards, BorderLayout.CENTER)
cards
是一个 JPanel,它充当主面板以及主面板内所有面板的容器。
有人可以帮我获得面板动画背景吗?
最佳答案
您可以使用Toolkit.getImage()
加载动画图像,然后在容器的paintComponent
中绘制图像。确保设置了ImageObserver
(不为空),以便正确更新动画帧。有关如何加载、观察和更新图像的详细信息,请参阅 How Images are Loaded Java AWT 引用中的附录。
这是一个简单的例子:
import java.awt.*;
import javax.swing.*;
import java.net.URL;
class AnimatedPanelDemo {
static class ImagePanel extends JPanel {
private Image image;
ImagePanel(Image image) {
this.image = image;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image,0,0,getWidth(),getHeight(),this);
}
}
private static void createAndShowUI() {
try {
JFrame frame = new JFrame("Image");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
Image image = Toolkit.getDefaultToolkit().getImage(new URL(
"http://duke.kenai.com/iconSized/duke.running.gif"));
ImagePanel imagePanel = new ImagePanel(image);
imagePanel.add(new JLabel("Some label"));
frame.add(imagePanel);
frame.setSize(100, 100);
frame.setVisible(true);
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}
关于java - JPanel 动画背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15940328/