1

我正在做一个项目,我需要显示我已经绘制的图像。我需要一个背景图像和几个可以移动的前景图像。最简单的方法是什么?我一直无法找到明确的答案。

ImageIcon image = new ImageIcon("imagename.jpg");
    JLabel label = new JLabel("", image, JLabel.CENTER);
    JPanel panel = new JPanel(new BorderLayout());
    panel.add( label, BorderLayout.CENTER );
    return panel;
4

2 回答 2

1

答案取决于。您是否要调整背景图像的大小以满足客户的要求?如果是这样,您是否要将图像“填充”或“拟合”到该区域。

看一下Java:维护 JPanel 背景图像的纵横比,以对该主题进行更长时间的讨论。

您需要问的下一个问题是,您是想在表面上绘制动画还是使用现有组件并移动它们...

你可以去看看...

其中使用paintComponent或直接绘制方法。

这种方法比较常见,也容易控制。问题是,如果您想执行子动画(即,将实际元素与主动画分开制作动画......想想走路或旋转),那么它变得更加困难。

查看

而是使用组件。如果您想提供子动画,这种方法很好,但是需要您在容器中调整组件的大小和位置,这很复杂。

就像旁注一样。 JLabel是一个容器;)

于 2013-05-22T00:41:19.220 回答
0

我发现的最简单的方法是创建一个全新的类并像这样扩展 JPanel:

    import javax.swing.*;
    import javax.imageio.*;
    import java.io.*;
    import java.awt.*;


    public class Background extends JPanel {

        private Image image;

        public Background(){
            this.setPreferredSize(new Dimension(width,height));
            image =Toolkit.getDefaultToolkit().getImage("your_image.jpg");;
        }
        public void paintComponent(Graphics g) {
            //paints the background image
            super.paintComponent(g);
            do{

            }while(g.drawImage(image, 0, 0, null)==false);
        }
  }

要实例化这个类,只需调用它:

Background b= new Background();

从你的主程序。

请记住,b 现在充当 Jpanel,因此您可以简单地调用b.add(element)

如果你不明白我所说的和向你展示的内容,请查看关于扩展类的文档:

扩展类

于 2013-05-21T23:52:35.517 回答