我只是想知道为什么这个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);
}
}
答案 0 :(得分:4)
问题是您向JFrame添加了两个组件。将组件添加到JFrame时,它实际上会将其添加到其内容窗格中。默认情况下,内容窗格使用BorderLayout作为其LayoutManager。如果未设置约束,则认为该组件位于中心。因此,这里有两个组件位于中心并从LayoutManager接收相同的边界,导致只显示一个组件,另一个组件被隐藏。这就是你看到JPanel而不是JLabel的原因。
如果要查看JLabel,请不要将该面板添加到框架中。
其他评论:
答案 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);
}
}