1

这个小程序假设显示两张图片彼此重叠。当我在浏览器中运行这个小程序时,它不显示图片。图片名称是正确的,它们与小程序位于同一文件夹中。

import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JApplet;


public class question3b extends JApplet{


    public void init() {
        repaint();
        }

     public void paint(Graphics g)
    {
        super.paint(g);
        ImageIcon image1 = new ImageIcon("1.JPG");
        ImageIcon image2 = new ImageIcon("2.JPG");
        g.drawImage(image1.getImage(), 100, 20 , 100, 100, this);
        g.drawImage(image2.getImage(), 100, 150 , 100, 100, this);

  }
}

这是 HTML 页面。

<html>
<head>
<title>Welcome Java Applet</title>
</head>
<body>
<applet
  code = "question3b.class"
  width = 1000
  height = 500>
</applet>
</body>
</html>
4

2 回答 2

4

建议:

  • 不要覆盖 JApplet 的绘制方法。
  • 而是覆盖 JPanel 的 paintComponent 方法并在小程序中显示面板。
  • 不要在paintComponent 方法中调用repaint()。请。
  • 不要在paint 或paintComponent 方法中读入图像。只读取一次图像。
  • 不要将图像作为文件读取,而是作为资源读取。
  • 测试以确保您正在寻找图像的正确位置。
  • 通过阅读一些关于 Swing 图形的教程,您会受益匪浅,因为您所做的事情看起来就像是在做一些猜测。这些教程将向您展示做事的正确方法。你不会后悔阅读它们。
  • 比在 JPanel 中绘制图像更好的方法是将它们放入 ImageIcons 并在 JLabels 中显示它们。
于 2013-06-02T20:54:54.947 回答
3

您遇到的问题与您加载图像的方式有关

ImageIcon image2 = new ImageIcon("2.JPG");

假设图像源是客户端硬盘上的本地文件,除其他外,这可能是非法操作。

答案将取决于文件的存储位置。如果图像是应用程序 jar 中的嵌入式资源,则应使用

ImageIcon image2 = new ImageIcon(getClass().getResource("/2.JPG"));

如果图像存储在 Web 服务器中,那么您应该使用

try {
    URL url = new URL(getCodeBase(), "2.jpg");
    img = ImageIO.read(url);
} catch (IOException e) { 
    e.printStackTrace();
}

并插入气垫船刚才所说的一切(+1)

于 2013-06-02T20:57:28.747 回答