2

我只是想知道为什么这个 100x100 像素的 .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);
}
}
4

2 回答 2

4

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

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

其他备注:

  • setVisible() 应该在创建组件层次结构后调用。
于 2012-05-31T06:05:23.520 回答
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);
        }
        }
于 2012-05-31T05:19:26.810 回答