Как я могу отобразить изображение в апплете? - PullRequest
2 голосов
/ 16 сентября 2011

У меня есть изображение, и я хочу отобразить его в апплете. Проблема в том, что изображение не отображается. Что-то не так с моим кодом?

Спасибо ...

Вот мой код:

import java.applet.Applet;
import java.awt.*;


 public class LastAirBender extends Applet
 {

 Image aang;

 public void init()
 {

  aang = getImage(getDocumentBase(), getParameter("images.jpg"));
 }

 public void paint(Graphics g) 
 {

    g.drawImage(aang, 100, 100, this);
 }

}

Ответы [ 2 ]

3 голосов
/ 16 сентября 2011
aang = getImage(getDocumentBase(), getParameter("images.jpg"));

Я подозреваю, что вы делаете что-то не так, и это должно быть просто:

aang = getImage(getDocumentBase(), "images.jpg");

Что такое элемент HTML / applet? Как называется изображение? Находится ли изображение в том же каталоге, что и HTML?

Обновление 1

2-я (измененная) строка кода попытается загрузить файл images.jpg в тот же каталог, что и HTML.

Конечно, вам может понадобиться добавить MediaTracker для отслеживания загрузки изображения, поскольку метод Applet.getImage() возвращает сразу (сейчас), но загружается асинхронно (позже).

Обновление 2

Попробуйте именно этот эксперимент:

Сохранить этот источник как ${path.to.current.code.and.image}/FirstAirBender.java.

/*
<applet class='FirstAirBender' width=400 height=400>
</applet>
*/
import javax.swing.*;
import java.awt.*;
import java.net.URL;
import javax.imageio.ImageIO;

public class FirstAirBender extends JApplet {

    Image aang;

    public void init() {
        try {
            URL pic = new URL(getDocumentBase(), "images.jpg");
            aang = ImageIO.read(pic);
        } catch(Exception e) {
            // tell us if anything goes wrong!
            e.printStackTrace();
        }
    }

    public void paint(Graphics g) {
        super.paint(g);
        if (aang!=null) {
            g.drawImage(aang, 100, 100, this);
        }
    }
}

Затем перейдите к приглашению и скомпилируйте код, затем вызовите средство просмотра апплета, используя имя источника в качестве аргумента.

C:\Path>javac FirstAirBender.java
C:\Path>appletviewer FirstAirBender.java
C:\Path>

Вы должны увидеть ваше изображение в апплете, нарисованное с разрешением 100x100 слева вверху.

2 голосов
/ 16 сентября 2011

1) мы живем .. в 21 веке, тогда, пожалуйста, JApplet вместо Applet

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

public class LastAirBender extends JApplet {

    private static final long serialVersionUID = 1L;
    private Image aang;

    @Override
    public void init() {
        aang = getImage(getDocumentBase(), getParameter("images.jpg"));
    }

    @Override
    public void paint(Graphics g) {
        g.drawImage(aang, 100, 100, this);
    }
}

2) для Icon / ImageIcon было бы лучше искать JLabel

3) пожалуйста, что такое getImage(getDocumentBase(), getParameter("images.jpg"));

там я буду ждать что-то вроде

URL imageURL = this.getClass().getResource("images.jpg");
Image image = Toolkit.getDefaultToolkit().createImage(imageURL);
Image scaled = image.getScaledInstance(100, 150, Image.SCALE_SMOOTH);
JLabel label = new JLabel(new ImageIcon(scaled));
...