JFrame中的图像显示

时间:2012-05-31 03:36:50

标签: java image swing jframe jlabel

我只是想知道为什么这个100x100 px .gif图像没有显示在屏幕上。图像位于同一目录中,因此程序应该没有问题找到它。有人知道如何解决这个问题吗?

import java.awt.*;
import java.awt.image.ImageObserver;
import java.io.File;
import javax.imageio.*;
import javax.swing.*;

public class Window extends JFrame{
//the pictures
ImageIcon guy = new ImageIcon("tester.gif");
JLabel pn = new JLabel(guy);
JPanel panel = new JPanel();

Window(){
    super("Photuris Lucicrescens");

    //Important
    setSize(700,600);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    add(panel);
    setVisible(true);
    //Decoration
    Image customIcon = Toolkit.getDefaultToolkit().getImage("iconImage.gif");
    setIconImage(customIcon);
    //Adding the image
    add(pn);
}
}

2 个答案:

答案 0 :(得分:4)

问题是您向JFrame添加了两个组件。将组件添加到JFrame时,它实际上会将其添加到其内容窗格中。默认情况下,内容窗格使用BorderLayout作为其LayoutManager。如果未设置约束,则认为该组件位于中心。因此,这里有两个组件位于中心并从LayoutManager接收相同的边界,导致只显示一个组件,另一个组件被隐藏。这就是你看到JPanel而不是JLabel的原因。

如果要查看JLabel,请不要将该面板添加到框架中。

其他评论:

  • 应在创建组件层次结构后调用setVisible()。

答案 1 :(得分:2)

我在计算机上试用它,图像显示在图标上。如果你想在背景上显示图像,试试这个:

import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.*;

        public class Caine extends JFrame{
        //the pictures
        ImageIcon guy = new ImageIcon("tester.gif");
        JLabel pn = new JLabel(guy);
        JPanel panel = new JPanel();

        Caine(){
            super("Photuris Lucicrescens");

            //Important
            setSize(700,600);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            add(panel);
            setVisible(true);
            JLabel im = new JLabel(new ImageIcon("iconImage.gif"));
            setIconImage(customIcon);
            panel.add(im);
            add(pn);
        }
        }