Изображение не будет отображаться в JLabel - PullRequest
3 голосов
/ 16 января 2012

Я просмотрел все посты, которые смог найти на этом сайте, и руководства по Java, и до сих пор не могу понять, почему мой код не работает.Даже когда я копирую / вставляю код других людей, он все равно не работает.

Я создал фиктивную программу просто для проверки этого, и код выглядит так:

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.ImageIcon;

public class gui extends JFrame {

    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    gui frame = new gui();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public gui() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 900, 700);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblNewLabel = new JLabel(new ImageIcon("bg.png"));
        contentPane.add(lblNewLabel);
    }
}

Фоновое изображение, которое я пытаюсь отобразить, bg.png, находится в корневой папке проекта.Я попытался несколько форматов для строки пути без успеха.Что я делаю не так?

Ответы [ 5 ]

4 голосов
/ 16 января 2012

Что вы делаете неправильно, когда вы вызываете new ImageIcon("bg.png"), вы пытаетесь загрузить файл bg.png из каталога current .Текущий каталог - это каталог, из которого выполняется java.И текущий каталог, вероятно, не тот каталог, в который вы верите, когда вы выполняете java из вашей IDE.

Используйте следующий код для отображения текущего каталога:

File dir1 = new File (".");
System.out.println("current directory: " + dir1.getAbsolutePath());

Вы, вероятно, должны загрузитьфайл png из пути к классам, используя Class.getResource("/images/bg.png").Создайте папку images в исходном каталоге и поместите файл в этот каталог.Ваша IDE скопирует его в целевую папку вместе с файлами .class.Если вы не используете IDE, вам придется скопировать ее самостоятельно.

РЕДАКТИРОВАТЬ:

После дополнительных исследований выяснилось, что основной причиной проблемы было использованиенулевой макет.Выше все еще остается, хотя, потому что загрузка файла из текущего каталога не очень хорошая идея.

3 голосов
/ 16 января 2012

Вы ищете изображение в виде файла. Когда вы делаете это, все поиски выполняются по пути относительно пользовательского каталога, который вы можете получить через

// code not tested
System.out.println(System.getProperty("user.dir"));

Так что вам, вероятно, придется скорректировать путь к изображению, чтобы получить его в виде файла. Другой вариант - получить его как ресурс, как отметил Шива Чаран, и в этом случае путь указывается относительно расположения ваших файлов классов.

О, и как только вы изучите и будете использовать менеджеры макетов, они станут интуитивно понятными, а создание и поддержание вашего графического интерфейса станет намного проще.

2 голосов
/ 16 января 2012

Просто поместите ваш bg.png вместе с файлом gui.class.Это будет делать, если вы напишите этот код

private ImageIcon getImage(String path)
{
    URL url = getClass().getResource(path);
    System.out.println(url);
    if (url != null)
        return (new ImageIcon(url));
    return null;
}

Более подробную информацию можно найти на Доступ к ресурсам

Здесь path = "bg.png";или если он находится внутри какой-то папки, чем path = "someFolder / bg.png";Итак, вы пишете что-то вроде этого:

JLabel lblNewLabel = new JLabel(getImage("bg.png"));
lblNewLabel.setBounds(30, 30, 100, 100);

Надеюсь, что это может помочь.

С уважением

2 голосов
/ 16 января 2012

Попробуйте так: -

ImageIcon icon = createImageIcon("bg.png", "image description");

protected ImageIcon createImageIcon(String path, String description) {
    java.net.URL imgURL = getClass().getResource(path);

    if (imgURL != null) {
        return new ImageIcon(imgURL, description);
    } else {
        System.err.println("Couldn't find file:" +path);
        return null;
    }
}
0 голосов
/ 24 ноября 2012

Возможно, вам потребуется отладить его и проверить, правильно ли загружен файл изображения.И затем вам нужно проверить, получает ли компонент JLabel свой размер, потому что добавление изображения в JLabel не расширит JLabel.

Сначала вы должны увидеть, что обработчик изображения имеет ширину и высоту.

...