Почему это приложение с графическим интерфейсом не показывает мне изображение? - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь написать приложение Java с объектом JFrame, который должен показывать три объекта меток, с текстом и изображением, мой текст "Север" и "Юг" отображается при выполнении, но мое изображение нет, даже я поместите файл изображения в папку src.

package deitel9;

import java.awt.BorderLayout;

import javax.swing.ImageIcon;

import javax.swing.JLabel;

import javax.swing.JFrame;


public class LabelDemo {

    public static void main(String[] args)
    {
         //crate a label with a plain text
        JLabel northLabel = new JLabel("North");

        //crate an icon from an image so we can put it on a JLabel
        ImageIcon labelIcon = new ImageIcon("maldive.jpg");

        //crate a label with an Icon instead of text
        JLabel centerLabel = new JLabel(labelIcon);

        //create another label with an Icon
        JLabel southLabel = new JLabel(labelIcon);

        //set the label to display text (as well as an icon)
        southLabel.setText("South");

        //create a frame to hold the labels
        JFrame application = new JFrame();

        application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //add the labels to the frame; the second argument specifies
        //where on the frame to add the label

        application.add(northLabel,BorderLayout.NORTH);
        application.add(centerLabel,BorderLayout.CENTER);
        application.add(southLabel,BorderLayout.SOUTH);

        application.setSize(300,300);
        application.setVisible(true);
    }//end main


}//end class LabelDemo

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Согласно документации , выбранный вами конструктор ImageIcon ожидает имя файла или путь к файлу, поэтому изображение должно быть в файловой системе, а не в пути к классам.

Создает ImageIcon из указанного файла. [...] Указанная строка может быть именем файла или путем к файлу.

Учитывая ваше описание, когда макет вашего проекта выглядит следующим образом

\---src
    \---deitel9
        LabelDemo.java
        maldive.jpg

тогда вы сможете получить изображение как ресурс, расположенный на пути к классу, вот так:

ImageIcon labelIcon = new ImageIcon(LabelDemo.class.getResource("maldive.jpg"));
0 голосов
/ 04 сентября 2018

Чтобы выяснить, что вы сделали неправильно в такой ситуации, вы можете просто позвонить

File file = new File ("maldive.jpg");
System.out.println(file.getAbsolutePath());

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

Конечно, если вы знаете, как использовать отладчик, вам не нужна вторая строка (и технически даже не первая, но это немного сложнее;))

0 голосов
/ 04 сентября 2018

Поскольку ваше изображение хранится в том же пакете, где хранится LabelDemo, попробуйте это,

ImageIcon labelIcon = new ImageIcon(LabelDemo.class.getResource("/deitel9/maldive.jpg").getFile());

или

private String getImage() {
    return getClass().getResource("/deitel9/maldive.jpg").getFile();
}

ImageIcon labelIcon = new ImageIcon(new LabelDemo().getImage());
...