Как установить Icon для JLabel из изображения из папки?

Я пытаюсь установить значок для JLabel из папки изображений всякий раз, когда элемент выбирается из JComboBox. Названия элементов в JComboBox и имена изображений в папке совпадают. Поэтому всякий раз, когда элемент выбирается из JComboBox, соответствующее изображение с тем же именем должно быть установлено в качестве значка для JLabel. Я пытаюсь сделать что-то подобное.

private void cmb_movieselectPopupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt){                                                             
        updateLabel(cmb_moviename.getSelectedItem().toString());
}





protected void updateLabel(String name) {
        ImageIcon icon = createImageIcon("C:\\Users\\xerof_000\\Pictures\\tmspictures\\" + name + ".jpg");
        if(icon != null){
            Image img = icon.getImage(); 
            Image newimg = img.getScaledInstance(lbl_pic.getWidth(), lbl_pic.getHeight(),  java.awt.Image.SCALE_SMOOTH);
            icon = new ImageIcon(newimg);
            lbl_pic.setIcon(icon);
            lbl_pic.setText(null);
        }
        else{
            lbl_pic.setText("Image not found");
            lbl_pic.setIcon(null);
        }
    }





protected static ImageIcon createImageIcon(String path) {
        URL imgURL;
        imgURL = NowShowing.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            return null;
        }
    }

Я думал, что проблема в "C:\Users\xerof_000\Pictures\tmspictures\" Я пытался использовать "C:/Users/xerof_000/Pictures/tmspictures/", но даже это не сработало. И что бы я ни делал, на JLabel отображается только "Изображение не найдено".

5 ответов

Решение

Это моя структура каталогов:

                                packageexample
                                      |
                   -------------------------------------------
                   |                  |                      |
                build(folder)     src(folder)           manifest.txt
                   |                  |
             swing(package)       ComboExample.java
                   |
            imagetest(subpackage)
                   |
     ComboExample.class + related .class files

Это содержимое файла ComboExample.java:

package swing.imagetest;    

import java.awt.*;
import java.awt.event.*;
import java.net.*;
import javax.swing.*;
    
public class ComboExample {

    private String[] data = new String[]{
                                            "geek0",
                                            "geek1",
                                            "geek2",
                                            "geek3",
                                            "geek4"
                                        };
    private String MESSAGE = "No Image to display yet...";
    private JLabel imageLabel;
    private JComboBox cBox;
    private ActionListener comboActions = 
                            new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {
            JComboBox combo = (JComboBox) ae.getSource();
            ImageIcon image = new ImageIcon(
                        getClass().getResource(
                            "/" + combo.getSelectedItem() + ".gif"));
            if (image != null) {
                imageLabel.setIcon(image);
                imageLabel.setText("");
            } else {
                imageLabel.setText(MESSAGE);
            }
        }    
    };

    private void displayGUI() {
        JFrame frame = new JFrame("Combo Example");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JPanel contentPane = new JPanel();
        imageLabel = new JLabel(MESSAGE, JLabel.CENTER);
        cBox = new JComboBox(data);
        cBox.addActionListener(comboActions);

        contentPane.add(imageLabel);
        contentPane.add(cBox);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String... args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ComboExample().displayGUI();
            }
        });
    }
}

ТЕПЕРЬ КОМПИЛЯЦИЯ:

Для компиляции я сделал это:

Gagandeep Bali@LAPTOP ~/c/Mine/JAVA/J2SE/src/packageexample
$ javac -d build src/*.java

Содержание файла манифеста:

введите описание изображения здесь

Создание файла JAR:

Gagandeep Bali@LAPTOP ~/c/Mine/JAVA/J2SE/src/packageexample
$ cd build

Gagandeep Bali@LAPTOP ~/c/Mine/JAVA/J2SE/src/packageexample/build
$ jar -cfm imagecombo.jar ../manifest.txt *

Теперь возьми это JAR File в любое место, имеющее эти изображения (geek0.gif, geek1.gif, geek2.gif, geek3.gif а также geek4.gif) и запустить JAR Fileи посмотреть результаты:-)

Как уже говорилось в разделе " Как использовать значки, getResource() метод ожидает найти изображение в JAR-файле вашей программы. Вам нужно будет переместить изображение в ваш проект. IconDemo это полный пример.

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

Проверьте, какое выражениеSystem.getProperty("user.dir")возвращает, либо распечатав его, либо с помощью отладчика, в моем случае это было:/home/Admin/NetBeansProjects/MyProject
если вы создадите папку со своим изображением в этом месте, чтобы ваши папки выглядели так:

      NetBeansProjects
  └MyProject
    ├src
    │ └main
    │   └java
    │     └mypackage
    │       └MyClass
    │         └myJavaFile.java
    └img
      └myImage.jpg

Тогда вы сможете просто сделать это:
myLabel.setIcon(new ImageIcon("img/myImage.jpg"));

Это решение работает, но имейте в виду, что оно, вероятно, не идеально во всех случаях, поскольку каждый ответ с высокой оценкой говорит о «папке ресурсов».

Поскольку вы используете jLabel, вы можете просто использовать HTML-теги, просто начните текст метки с и используйте HTML-теги в метке, как вы хотите, в случае путешествия:Вы можете использовать это заменить:). С улыбкой значок.

      /*

Create an Image File whose size is 700 x 472 (pixels) in any image editor. 
Here Image was created using MS - Paint.

Make sure that the Image File and the main file are in the same folder.

The size of the JFrame should be set to 700 x 472 (pixels) in the program. 


Set the JLabel's IconImage.

Add the JLabel to the JFrame.

Set JFrame properties.

Display JFrame.

------------------------------------------------------------------------------

label.setIcon(getClass().getResources(String name));

label.setIcon(new ImageIcon(String file));


These 2 methods, don't always work with us. 


So, we create a method "getImageIcon(File f)" that returns a new ImageIcon Object,
everytime a new File Object is passed to it. 


*/




import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;


import java.awt.Image;
import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;


import javax.swing.ImageIcon;

import static javax.swing.WindowConstants.*;






public class ImageDemo
{

    JFrame frame = new JFrame();      //initialized


    JLabel label = new JLabel();      //initialized


    JButton button = new JButton();   //initialized


    ImageIcon ii;                //not initialized  





    public void displayImage()
    {

        //Layout Type: Null Layout.

        label.setIcon(getImageIcon(new File("print.png")));


        button.setBounds(150,150,358,66);
        //Note that sizes of the Image and Button are same.
        button.setIcon(getImageIcon(new File("Button.png")));



        label.add(button);
        //add the button to the label


        frame.add(label);
        frame.setBounds(300, 50, 700, 472);
        //(300 x 50 = HorizontalAlignment x VerticalAlignment)
        //(700 x 472 = Width x Height)      

        frame.setTitle("Image Demo");
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE); //WindowConstants.EXIT_ON_CLOSE
        frame.setVisible(true);


    }





    public ImageIcon getImageIcon(File f)
    {


        try
        {
            Image im = ImageIO.read(f);


            ii = new ImageIcon(im);


        }
        catch(IOException i)
        {

            i.printStackTrace();


        }



        finally
        {

            return ii;

        }


    }



    public static void main(String[] args)
    {

        ImageDemo id = new ImageDemo();

        id.displayImage();


    }





}
Другие вопросы по тегам