Displaying an ImageIcon

后端 未结 2 1654
面向向阳花
面向向阳花 2020-12-11 23:39

I am trying to display an image on a JPanel. I\'m using an ImageIcon for rendering the image, and the image is in the same directory as the class f

相关标签:
2条回答
  • 2020-12-12 00:00

    This is a common confusion among programmers. The getClass().getResource(path) loads resources from the classpath.

    ImageIcon image = new ImageIcon("peanut.jpg");

    If we only provide the name of the image file then Java is looking for it in the current working directory. If you are using NetBeans, the CWD is the project directory. You can figure out the CWD at runtime with the following call:

    System.out.println(new File("").getAbsolutePath());

    The following is a code example, where you can test this for yourself.

    package com.zetcode;
    
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.io.File;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    
    class DrawingPanel extends JPanel {
    
        private ImageIcon icon;
    
        public DrawingPanel() {
    
            loadImage();
            int w = icon.getIconWidth();
            int h = icon.getIconHeight();
            setPreferredSize(new Dimension(w, h));
    
        }
    
        private void loadImage() {
    
            icon = new ImageIcon("book.jpg");
        }
    
        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
    
            icon.paintIcon(this, g, 0, 0);
        }
    
    }
    
    public class ImageIconExample extends JFrame {
    
        public ImageIconExample() {
    
            initUI();
        }
    
        private void initUI() {
    
            DrawingPanel dpnl = new DrawingPanel();
            add(dpnl);
    
            // System.out.println(new File("").getAbsolutePath());         
    
            pack();
            setTitle("Image");
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {                
                    JFrame ex = new ImageIconExample();
                    ex.setVisible(true);                
                }
            });
        }
    }
    

    The following picture shows where to put the book.jpg image in NetBeans if we only provide the image name to the ImageIcon constructor.

    Location of the image in NetBeans project

    We have the same program from the command line. We are inside the ImageIconExample directory.

    $ pwd
    /home/vronskij/prog/swing/ImageIconExample
    
    $ tree
    .
    ├── book.jpg
    └── com
        └── zetcode
            ├── DrawingPanel.class
            ├── ImageIconExample$1.class
            ├── ImageIconExample.class
            └── ImageIconExample.java
    
    2 directories, 5 files
    

    The program is run with the following command:

    $ ~/bin/jdk1.7.0_45/bin/java com.zetcode.ImageIconExample

    You can find out more at my Displaying image in Java tutorial.

    0 讨论(0)
  • 2020-12-12 00:19

    You should use

    ImageIcon image = new ImageIcon(this.getClass()
                    .getResource("org/myproject/mypackage/peanut.jpg"));
    
    0 讨论(0)
提交回复
热议问题