JPanel:显示图像最简单的方法是什么?

时间:2013-05-21 22:31:42

标签: java image swing jframe jpanel

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

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;

2 个答案:

答案 0 :(得分:1)

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

请查看Java: maintaining aspect ratio of JPanel background image,以便对该主题进行更长时间的讨论。

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

你可以查看......

使用paintComponent或直接绘画方法。

这种方法相对常见且易于控制。问题是如果你想要执行子动画(即将实际元素与主动画分开动画...想想走路或旋转),那就变得更加困难了。

结帐

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

正如旁注。 JLabel是一个容器;)

答案 1 :(得分: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)

即可

如果您不理解我所谈论的内容并向您展示,请查看有关扩展课程的文档:

Extending Classes