我正在尝试使用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'位于可执行文件的父目录中,那么人们解决这个问题的主要方式是什么?
答案 0 :(得分:1)
这是使用Swing在JPanel上绘制图像的一种方法。
为了使此代码有效,您必须将映像放在与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);
}
}
}