JLabel不会在课堂上显示图像

我目前正在尝试创建一个 GUI,其中两个硬币图像在边框布局的中心彼此相邻显示。我有一个类(图像),我尝试在其中使用 JLabel 来显示图标,另一个类处理 GUI 框架(GameGUI)。然而,尽管我尽了最大努力,标签仍不显示图像。我浏览了无数的教程,但找不到任何东西可以解决这个问题。相对路径是正确的,我该如何解决这个问题?


图片类


public class Images extends JLabel{


    private JLabel heads, tails;


    public Images() {

        heads = new JLabel(new ImageIcon("img/heads.png"));

        tails = new JLabel(new ImageIcon("img/tails.png"));

        add(heads);

        add(tails);

    }

}

游戏GUI类


public class GameGUI extends JFrame{


    public GameGUI() {

        super("");

        setLayout(new BorderLayout(10,10));


        Menu menu = new Menu();

        ToolBar toolBar = new ToolBar();

        Images images = new Images();


        setJMenuBar(menu);


        add(BorderLayout.NORTH, toolBar);

        add(BorderLayout.CENTER, images);


        setSize(1000, 500);

        setLocationRelativeTo(null);

        setVisible(true);

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    }

}


一只斗牛犬
浏览 113回答 1
1回答

吃鸡游戏

问题:public class Images extends JLabel{    private JLabel heads, tails;    public Images() {        heads = new JLabel(new ImageIcon("img/heads.png"));        tails = new JLabel(new ImageIcon("img/tails.png"));        add(heads);        add(tails);    }}JLabels 使用空布局,这意味着您的内部 JLabel 组件的大小将为 0, 0,并且图像 JLabel 本身将具有相同的首选大小,并且不会显示任何内容,因此您永远不想将 JLabel 添加到J标签。不要让图像扩展 JLabel,而是扩展 JPanel,并给它一个像样的布局,也许是 GridLayout。例如。,public class ImagePanel extends JPanel {    private JLabel headsLabel = new JLabel();    private JLabel tailsLabel = new JLabel();    public ImagePanel(Icon headsIcon, Icon tailsIcon) {        headsLabel.setIcon(headsIcon);        tailsLabel.setIcon(tailsIcon);        setLayout(new GridLayout(1, 0);        add(headsLabel);        add(tailsLabel);    }       }再次,我建议将图像作为资源获取,而不是使用 ImageIO 读取的文件,例如Image headImage = ImageIO.read(getClass().getResource(resourcePath));Icon headIcon = new ImageIcon(headImage);资源路径至关重要,并且取决于图像相对于类文件的位置。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java