繁体   English   中英

java drawImage不起作用

[英]java drawImage doens't work

我正在尝试使用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);

    }
}

这有点莫名其妙:

 public class panel_jogo extends Applet // ?? Applet ??

Applet是否具有paintComponent(...)方法? 我不这么认为。

编辑-不会,我看到您评论了@Override-太糟糕了,因为它会告诉您不存在任何覆盖,因此您的paintComponent(...)方法注定不会做任何有用的事情。


建议:

  • 让您的绘图面板类扩展JPanel。
  • 不要注释掉@Override注释。 这是有原因的。
  • 确保您的paintComponent(...)方法确实调用了已注释掉的super方法。
  • 请遵循Java命名约定,包括使类名以大写字母开头。
  • 另一个可能的问题是您似乎正在向右绘制611像素,向下绘制468像素的图像。 考虑让您的绘图程序覆盖getPreferredSize()这样实际上它足够大,可以在所需位置显示整个图像。
  • 或者,或者可能更好,将图像放入ImageIcon中,将其放入JLabel中,并显示使用布局管理器将JLabel放置在JPanel的右下角。

看来您“借用了”代码,实际上遵循了我上面的建议,但是由于某些未知的原因,更改了它以迫使其行为异常,特别是通过扩展Applet。 您能解释一下这背后的原因吗?

public class panel_jogo extends Applet
{
    public BufferedImage  back;
    public panel_jogo()
    {
        try 
        {
            back = ImageIO.read(new File("src/Recursos/mapa_piso1.png"));  

AppletFile类不能“很好地配合”。

  1. 小程序必须由您进行数字签名,并得到用户的信任(在出现提示时),以便访问File
  2. 即使受到信任,小应用程序也将无法从服务器加载图像,创建的任何File对象都只能与客户端计算机相关,并且(我认为)在mapa_piso1.png的硬盘上找不到mapa_piso1.png 。用户的PC!
  3. Applet 可以通过URL从其来源的服务器加载图像。

  1. 为什么要编写小程序? 如果是由于规格。 请向老师介绍为什么CS老师应该停止教Java小程序
  2. 为什么选择AWT而不是Swing? 出于许多充分的理由放弃使用AWT组件,请参阅有关通过AWT进行Swing附加服务的答案。 如果您需要支持较旧的基于AWT的API,请参阅混合重量级和轻量级组件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM