简体   繁体   中英

Image/text not showing in JFrame

I want to create a Window with an image and a text so far i've got this:

public void ShowPng1() {
        ImageIcon theImage = new ImageIcon("Icon_Entry_21.gif");
        panel.setSize(270, 270);
        JLabel label = new JLabel("Hello, World!");
        JLabel imageLabel = new JLabel(theImage);
        imageLabel.setOpaque(true);
        panel.add(imageLabel);
        panel.add(label);
        panel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel.setVisible(true);
    }

My panel:

private JFrame panel = new JFrame();

For some reason it won't load nor image nor text, it just pops up as a white window. What can be the problem? I've also tried changing the format to .png , didn't work.

UPDATE

import java.awt.BorderLayout;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class Img {

    private JFrame panel = new JFrame();

    public Img(){
        ShowPng1();
    }

    public void ShowPng1() {
        ImageIcon theImage = new ImageIcon("Icon_Entry_21.gif");
        panel.setSize(300, 300);
        panel.setResizable(false);
        JLabel label = new JLabel("Hello, World!");
        JLabel imageLabel = new JLabel(theImage);
        imageLabel.setOpaque(true);
        panel.add(imageLabel);
        panel.add(label, BorderLayout.PAGE_END);
        panel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel.setVisible(true);
    }

    public static void main(String[] args) {
        new Img();
    }
}

I've managed to get this working, which is ridiculous because I can't figure out how to make it work with my program. Reimeus gave me an idea on creating this script separately, the fix and that worked. I will have to look through my entire program to see if I'm missing anything. Creating it in a separate class should work as well.

it just pops up as a white window

Sounds like you're blocking the EDT on startup. You may need to use one of Swing's concurrency mechanisms to solve it. Post a Minimal, Complete, Tested and Readable example so we can determine this for sure.

In the meantime...

You're displacing the component containing the theImage component in the BorderLayout.CENTER location

panel.add(label);

You could organize your labels so that they can appear simultaneously (placing the components at 2 different BorderLayout locations will do)

panel.add(imageLabel);
panel.add(label, BorderLayout.PAGE_END);

You should make a JPanel and add it to the frame, and then add the labels to the panel

Something like

 private JPanel panel = new JPanel;

and then add it to the frame in your method calling

frame.add(panel);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM