我想加载图片并将其用作我的JPanel的Back Ground,此代码不会给我任何错误或结果。
我也尝试使用BufferedImage并将File位置设置为图像的路径,但是我得到了一个错误"无法读取输入文件!",经过一些研究后我发现了这种方法还有一个更容易的选择。
import javax.swing.ImageIcon;
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.io.File;
import java.io.IOException;
public class drawArea extends JPanel {
public drawArea(){
init();
}
private void init(){
setPreferredSize( new Dimension( 570, 570 ) );
setVisible(true);
}
private void initializeGrid(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
Image img = new ImageIcon("/LinearEquations/src/exit.png").getImage();
g2d.drawImage(img, 0, 0, this);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
initializeGrid(g);
}
}
先谢谢
答案 0 :(得分:3)
永远不要在paint或paintComponent方法中读取图像。要知道这种方法在很大程度上决定了你的程序的感知响应能力,如果你通过不必要地反复阅读图像来减慢它,你的用户就不会感到高兴。
您的问题可能是使用错误的相对路径。我建议您尝试使用init()
方法读取图像并将其存储为变量。不要将其作为文件读取,而是将其作为从类资源获取的InputStream。
如,
public class DrawArea extends JPanel {
// we've no idea if this is the correct path just yet.
private static final String IMG_PATH = "/exit.png";
public DrawArea() { // better have it throw the proper exceptions!
setPreferredSize( new Dimension( 570, 570 ) ); // not sure about this either
// setVisible(true); // no need for this
img = ImageIO.read(getClass().getResourceAsStream(IMG_PATH));
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (img != null) {
g.drawImage(img, 0, 0, this);
}
}