图像未显示在绘图组件中

时间:2012-08-11 00:18:33

标签: java image swing paintcomponent japplet

它给了我一个黑色屏幕的setbackground,          但它似乎没有阅读图像或绘制它们,              如果你能告诉我这些信息,我们将不胜感激            关于我的代码,我很难理解一般          r模糊的答案,谢谢。

import java.awt.*;
import javax.swing.*;
import javax.swing.JComponent.*;

public class Movie extends JApplet {

    private String movName1;
    private String director1;
    private int yearMade1;
    private Image movPic1;
    private String movName2;
    private String director2;
    private int yearMade2;
    private Image movPic2;
    private String movName3;
    private String director3;
    private int yearMade3;
    private Image movPic3;
    private String movName4;
    private String director4;
    private int yearMade4;
    private Image movPic4;

    public void init() {
        MovieDis goo = new MovieDis(movPic1, movPic2, movPic3, movPic4);
        goo.setBounds(0, 0, 750, 500);
        add(goo);
    }
}

class MovieDis extends JComponent {

    private String movName1;
    private String director1;
    private int yearMade1;
    private Image movPic1;
    private String movName2;
    private String director2;
    private int yearMade2;
    private Image movPic2;
    private String movName3;
    private String director3;
    private int yearMade3;
    private Image movPic3;
    private String movName4;
    private String director4;
    private int yearMade4;
    private Image movPic4;

    public MovieDis(Image movPic1, Image movPic2, Image movPic3, Image movPic4) {
        setBackground(Color.black);
        movPic1 = Toolkit.getDefaultToolkit().createImage("Shaw.jpg");
        movPic2 = Toolkit.getDefaultToolkit().createImage("dances.jpg");
        movPic3 = Toolkit.getDefaultToolkit().getImage("Inception.jpg");
        movPic4 = Toolkit.getDefaultToolkit().getImage("Cuckoo.jpg");
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.black);
        g.fillRect(0, 0, 750, 500);
        g.drawImage(movPic1, 35, 35, 200, 200, this);
        g.drawImage(movPic2, 35, 515, 200, 200, this);
        g.drawImage(movPic3, 265, 35, 200, 200, this);
        g.drawImage(movPic4, 35, 515, 200, 200, this);
    }
}

2 个答案:

答案 0 :(得分:2)

从我所看到的,很可能你的图像为空或空。看到这是applet代码并且您没有使用正确的URL,如果无法找到图像,Toolkit可能会返回一个sentinel值(宽度和高度为-1的图像)。不幸的是,在这种情况下,g.drawImage不会抛出异常。请检查您的图像是否正确加载。

答案 1 :(得分:2)

有很多原因可能不起作用,最明显的是

  • 您无权读取图像(文件系统或URL)
  • 网址引用错误(因为文件的位置不在您认为的位置)

根据文件的存储位置,您有两种选择。

如果文件与Jar一起存储在服务器上。您需要知道文档库参考。

因此,在init方法中,您需要添加

URL base = getDocumentBase();
System.out.println("base = " + base); // testing only
movPic1 = getImage(base, "issue169.jpg");
movPic2 = getImage(base, "issue194.jpg");
movPic3 = getImage(base, "issue248.jpg");
movPic4 = getImage(base, "issue78.jpg");

这假设图像与HTML文件位于服务器上的同一目录中。您可以根据需要使用相对路径。

如果文件存储/捆绑在Jar中(这可能是静态图像的首选方式),则需要使用classloader来查找它们

try {
    movPic1 = ImageIO.read(getClass().getResource("/testapplet/issue169.jpg"));
    movPic2 = ImageIO.read(getClass().getResource("/testapplet/issue194.jpg"));
    movPic3 = ImageIO.read(getClass().getResource("/testapplet/issue248.jpg"));
    movPic4 = ImageIO.read(getClass().getResource("/testapplet/issue78.jpg"));
} catch (IOException ex) {
    ex.printStackTrace();
}

我使用了这种方法,但在测试时确实遇到了一个小问题。因为我的文件已被捆绑(但),applet查看器试图将它们作为File引用加载,它没有权限 - applet视图允许您将其设置为不受限制。

这最终导致了

enter image description here

PS-我将applets布局管理器设置为BorderLayout,而不是使用绝对定位。