我正在尝试使用java面板显示图像,但这是不行的。代码不会给出任何异常和/或错误,但图像不会加载。 图像确实存在,我也试过.jpg,但这也不行。
package feupcraftproject;
import javax.swing.*;
public class frame_jogo extends JFrame
{
public panel_jogo panel;
public frame_jogo()
{
panel = new panel_jogo();
//setLayout(new GridLayout(1,1,0,0));
add(panel);
}
}
package feupcraftproject;
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.ImageIO;
import java.io.*;
import java.applet.Applet;
public class panel_jogo extends Applet
{
public BufferedImage back;
public panel_jogo()
{
try
{
back = ImageIO.read(new File("src/Recursos/mapa_piso1.png"));
}
catch (IOException A)
{
JOptionPane.showMessageDialog(null, A.toString());
}
//this.setBackground(Color.BLACK);
}
//@Override
public void paintComponent(Graphics g)
{
//super.paintComponents(g);
g.drawImage(back, 611, 468, this);
}
}
答案 0 :(得分:4)
这有点莫名其妙:
public class panel_jogo extends Applet // ?? Applet ??
Applet是否有paintComponent(...)
方法?我不这么认为。
编辑 - 它没有,我看到你评论了@Override - 太糟糕了,因为它会告诉你没有覆盖存在,所以你的paintComponent(...)
方法命中注定没什么用处
<强>建议:强>
@Override
注释。这是有必要的。paintComponent(...)
方法确实实际上调用了超级方法,这是您已注释掉的内容。getPreferredSize()
,以便它实际上足够大,以便在其所需位置显示整个图像。 看起来你“借用”的代码实际上遵循了我上面的推荐,但由于一些未知的原因改变它以强迫它行为不端,特别是通过扩展Applet。你能解释一下这背后的推理吗?
答案 1 :(得分:0)
public class panel_jogo extends Applet
{
public BufferedImage back;
public panel_jogo()
{
try
{
back = ImageIO.read(new File("src/Recursos/mapa_piso1.png"));
Applet
和File
类不能“很好地融合”。
File
。File
个对象仅与客户端计算机相关,并且mapa_piso1.png
不会(我认为)会在用户PC的硬盘上找到!Applet
可以<{1}}从其来自的服务器加载图片。