[Java] Laden & Anzeigen von Images

Hallo!

Kann mir jemand sagen, wie ich mit einer Java-Anwendung ein Bild aus einer Datei auf meiner lokalen Platte (.gif/.jpg) laden und dieses dann in einem Fenster der Applikation anzeigen kann?

In einem Applet ist dies ja ganz einfach, aber in einer eigenständigen Anwendung bekomme ich es nicht hin.

Schon mal Danke für Eure Mühe.

Gruß, Marc

Hallo Marc!

Kann mir jemand sagen, wie ich mit einer
Java-Anwendung ein Bild aus einer Datei
auf meiner lokalen Platte (.gif/.jpg)
laden und dieses dann in einem Fenster
der Applikation anzeigen kann?

Einfach ein Label erstellen und diesem das ImageIcon übergeben:
ImageIcon icoBeispiel = new ImageIcon(„Beispiel.gif“);
JLabel lblBeispielGif = new JLabel(icoBeispiel);

Grüße, Tanja

Hallo Tanja

Danke für deine Antwort. Ist aber leider nicht ganz das, was ich wollte (meine Schuld, die Frage war wohl ein Bisschen zu allgemein formuliert).

Woran ich gedacht habe, war daß man Das Bild beliebig platzieren kann (mit x- und y- Position in Pixeln).

In einem Applet geht das in etwa so:

Image img= getImage („http://…/bild.gif“);
[…]
paint(Graphics g){
  g. drawImage (img,x,y, this );
}

Das Gleiche in einer Anwendung hinzubekommen, ist nicht so einfach. Z.B. gibt es da die getImage()-Methode nicht.

Darüber hinaus benötigt man ein ImageObserver-Objekt. Im Beispiel ist das das this , also daß Applet selbst. Eigentlich müßte das in meinem Fall dann das Fenster sein, in dem ich das Bild darstellen möchte, oder?

Gruß, Marc

Einfach ein Label erstellen und diesem
das ImageIcon übergeben:
ImageIcon icoBeispiel = new
ImageIcon(„Beispiel.gif“);
JLabel lblBeispielGif = new
JLabel(icoBeispiel);

Hallo Marc!

Woran ich gedacht habe, war daß man Das
Bild beliebig platzieren kann (mit x- und
y- Position in Pixeln).

Natürlich kann man das, denn Du positionierst ja das JLabel, dem Du nachher das Bild übergibst mit dem Layout-Manager Deiner Wahl (ich habe im folgenden Beispiel GridBagLayout verwendet). Also:

ImageIcon icoBeispiel = new
ImageIcon(„Beispiel.gif“);
JLabel lblBeispielGif = new
JLabel(icoBeispiel);

// Jetzt fügts Du alle Deine Gui-Komponenten
// also auch das JLabel lblBeispielGif
// Deinem Panel hinzu.
this.getContentPane().add(pnlDeinPanel, new GridBagConstraints(0, 0, 5, 5, 1.0, 1.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 557, 406));
pnlDeinPanel.add(lblKursGif, new GridBagConstraints(2, 1, 1, 2, 0.0, 0.0
,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 79, 0, 0), 74, 63));

Das Gleiche in einer Anwendung
hinzubekommen, ist nicht so einfach.

Doch, es ist ganz leicht. Ich habe schon öfters in Java-Anwendungen Bilder eingebaut. Du benutzt zum Entwickeln doch sicher eine IDE, oder? Damit erstellst Du jetzt einfach einen neue Klasse, die Du von JFrame ableitest und knallst ein Panel drauf. Darüber legst Du ein Label, dem Du im Konstruktor dem Namen des ImageIcons übergibst (wie oben im Beispiel).

Darüber hinaus benötigt man ein
ImageObserver-Objekt. Im Beispiel ist das
das this, also daß Applet selbst.

Ich habe ich es noch nie ein ImageObserver-Objekt? Warum benötigst Du das?

Eigentlich müßte das in meinem
Fall dann das Fenster sein, in dem ich
das Bild darstellen möchte, oder?

Normalerweise legt man die Gui-Komponenten auf Panels, es wäre also das Panel. Falls Du keine Panels verwendest wäre es der Frame.

Grüße, Tanja

Hallo Tanja

Du bist ja von der ganz schnellen Truppe :wink:

Natürlich kann man das, denn Du
positionierst ja das JLabel, dem Du
nachher das Bild übergibst mit dem
Layout-Manager Deiner Wahl

Ich glaube, ich hätte in beim letzten Mal auch noch erwähnen sollen, daß es sich bei der „Anwendung“ um ein Spiel handelt. Das Spielfeld soll dabei aus einzelnen Blöcken zusammengesetzt werden und darauf soll man dann mit seinen Spielfiguren herumrennen könne. Das Spielfeld kann sich verändern (wenn man mit seiner Figur etwas einsammelt zum Beispiel) und daher weiss ich nicht so ganz, ob ich über die LayoutManager weiterkomme, weil sie zum einen recht unflexibel sind und sie zum anderen die ganze Sache nicht unbedingt schneller machen. Aber ausprobieren werde ich es trotzdem einmal, vielleicht kann man da was tricksen. Leider erst heute Abend, muß nämlich arbeiten :frowning:

Ich habe ich es noch nie ein
ImageObserver-Objekt? Warum benötigst Du
das?

Das wird von der Methode drawImage() verwendet.
Ich habe dazu etwas in dem Buch „Java in a Nutshell“ gelesen. Leider alles ohne Beispiele. Ein ImageObserver überwacht das Laden eines Bildes. Wird u.a. von der Component-Klasse des AWT oder eben von Applet implementiert. Ich habe gerade weder das Buch noch meinen Code griffbereit, sonst könnte ich Dir auch etwas genauer erklären, was ich bereits versucht habe.

Gruß, Marc

[Java] Laden & Anzeigen von Images

Hi Marc,

ich bin zwar selber noch Anfänger in Sachen Java, aber ich habe es wie folgt gemacht um ein Bild in einer App anzeigen zu lassen :

Image img = Toolkit.getDefaultToolkit().getImage(„Image.gif“);

public void paint(Graphics screen) {
screen.drawImage(img, 1, 1, this);
}

Vielleicht hast Du ja einen Tip für mein oben aufgeführtes Problem…

Tschö