图像位置?

时间:2014-12-10 13:40:47

标签: image location

我只是使用此代码导入图像时遇到问题。图像应存放在哪里?我认为它必须位于源文件夹中的文件夹中,在这种情况下称为ImageIcon,但我不确定...感谢任何帮助过的人!

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

    class Surface extends JPanel {

    private Image mshi;

    public Surface() {

        loadImage();
        setSurfaceSize();
    }

    private void loadImage() {

        mshi = new ImageIcon("mushrooms.jpg").getImage();
    }

    private void setSurfaceSize() {

        Dimension d = new Dimension();
        d.width = mshi.getWidth(null);
        d.height = mshi.getHeight(null);
        setPreferredSize(d);        
    }

    private void doDrawing(Graphics g) {

        Graphics2D g2d = (Graphics2D) g;
        g2d.drawImage(mshi, 1, 1, null);
    }

    @Override
    public void paintComponent(Graphics g) {

        super.paintComponent(g);
        doDrawing(g);
    }
}

public class DisplayImage extends JFrame {

    public DisplayImage() {

        initUI();
    }

    private void initUI() {

        setTitle("Mushrooms");

        add(new Surface());

        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                DisplayImage ex = new DisplayImage();
                ex.setVisible(true);
            }
        });
    }
}

2 个答案:

答案 0 :(得分:0)

您是否尝试将图像放在与类文件Surface相同的目录中?

答案 1 :(得分:0)

好的,抱歉,我没有看过DisplayImage类。

我认为最好的方法是为Surface创建一个单独的类文件。 写入Surface类文件,带有参数的构造函数。参数将是图像路径。如果您想要更改图像,将很容易。

这样的事情:

public class Surface extends JPanel {
    private Image mshi;

    public Surface(String imagePath) {

        mshi = new ImageIcon(imagePath).getImage();

        setSurfaceSize();
    }

    private void setSurfaceSize() {

        Dimension d = new Dimension();
        d.width = mshi.getWidth(null);
        d.height = mshi.getHeight(null);
        setPreferredSize(d);        
    }

    private void doDrawing(Graphics g) {

        Graphics2D g2d = (Graphics2D) g;
        g2d.drawImage(mshi, 1, 1, null);
    }

    @Override
    public void paintComponent(Graphics g) {

        super.paintComponent(g);
        doDrawing(g);
    }

}

你不需要编写方法loadImage(),它可能会在你的类中使用,因为它是私有的,只做一件简单的事情。

关于项目目录的结构,可以这样做

项目目录\ src

项目目录\ src \ Surface.class

项目目录\ src \ DisplayImage.class

项目目录\ images

项目目录\ images \ mushrooms.jpg

Ps:对不起我的英文,它仍在建设中。