使用Swing在Java中显示图像

时间:2015-03-14 11:17:44

标签: java image swing awt

我正在尝试使用Swing在窗口中显示图像。

出于某种原因,当我运行程序时,显示的对话框不包含任何内容。是否有明显的理由发生这种情况?

public class GameScreen {
  public static void main(String[] args) {
      GameView view = new GameView();
      view.setVisible(true);
  }
}
public class GameView extends JFrame {
  public MapView mapPanel;
  public void GameView() {
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mapPanel = new MapView();
    this.add(mapPanel);
    this.pack();
    this.setLocationByPlatform(true);
 }
}
public class MapView extends JPanel {
  public MapView() {
    ImageIcon map = new ImageIcon("map.jpeg");
    JLabel mapLabel = new JLabel(map);
    this.add(mapLabel,BorderLayout.CENTER);
  }
}

另一方面,我听说不建议在文件路径名中使用../../,但在大多数应用程序包中,'resources folder'位于可执行文件的父目录中,那么人们解决这个问题的主要方式是什么?

1 个答案:

答案 0 :(得分:1)

这是使用Swing在JPanel上绘制图像的一种方法。

Image

为了使此代码有效,您必须将映像放在与Java代码相同的目录中。

如果要将图像放在不同的目录中,则必须将该目录作为Java类路径的一部分,并在文件名的前面添加斜杠。

package com.ggl.testing;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

public class DrawImage implements Runnable {

    @Override
    public void run() {
        JFrame frame = new JFrame("Image");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JScrollPane scrollPane = new JScrollPane(new ImagePanel(getImage()));
        frame.add(scrollPane);

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

    private Image getImage() {
        try {
            return ImageIO.read(getClass().getResourceAsStream(
                    "StockMarket.png"));
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new DrawImage());
    }

    public class ImagePanel extends JPanel {

        private static final long serialVersionUID = -2668799915861031723L;

        private Image image;

        public ImagePanel(Image image) {
            this.image = image;
            this.setPreferredSize(new Dimension(image.getWidth(null), image
                    .getHeight(null)));
        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, this);
        }

    }

}