# Bild (jpg) in einem JApplet



## Krondor (8. Aug 2004)

Hi Leute

Ich bin ziemlich neu in der Applet-Programmierung und wollte
mir ein kleines Applet schreiben mit welchem ich die Bilder,
die auf meinem Webspace liegen wie in einer Diashow anzeigen
kann.

Ich dachte mir jedoch zuerst, ich probier mal anfangs nur einfach ein 
ganz normales Bild anzuzeigen ohne irgendwelchen Schnick-Schnack.
Und siehe da schon tauchen die ersten Probleme auf.

Das Bild wird einfach nicht angezeigt.

Zuerstmal, Java Applets funktionieren auf meinem Webspace, dass 
hab ich schon getestet, indem ich einfach über ein Applet und den 
drawString-Befehl einen Text ausgebe.

Das Bild welches ich zeichnen möchte habe ich mit einem MediaTracker
geladen und wollte es dann ganz einfach mit drawImage ausgeben.
Das ganze soll in einem JPanel passieren.

Bei mir auf der Festplatte funktioniert das Applet ganz normal aber auf dem Server nicht.

Grob gehe ich folgendermaßen vor:

- Habe eine Klasse Bildergallerie, welche von JApplet erbt und die auch die nötigen Funktionen implementiert
- Über die init-Methode (von JApplet) erstelle ich ein neues Objekt vom Typ MainPanel (erbt von JPanel).
- MainPanel erstellt den MediaTracker und ein Toolkit mit dem ich das Image reinlade und warte bis es fertig geladen ist.
- Danach wird dann das Bild in der Methode painComponent(Graphics g)  mit der Methode g.drawImage(...) angezeigt.

Ach übrigens, ich habe die class-Datei einfach so auf dem Server liegen (also nicht als jar oder so) und starte
sie über eine HTML-Datei.

Danke schonmal im Voraus,
Krondor



Hier noch der Quellcode wer genau sehen will was ich da verzapft habe:


```
/*
 * Quellcode von Bildergallerie.java
 */
package system;

import views.MainPanel;
import javax.swing.JApplet;

public class Bildergallerie extends JApplet{
	//Applet-Methoden
	public void init(){
		//Das MainPanel wird angezeigt
		MainPanel mainPanel = new MainPanel();
		getContentPane().add(mainPanel);
	}
	public void start(){
		
	}
	public void stop(){
		
	}
	public void destroy(){
		
	}	
}
```


```
/*
 * Quellcode von MainPanel.java
 */
package views;

import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Color;
import java.awt.Toolkit;
import java.awt.MediaTracker;
import java.awt.Image;
import java.awt.BorderLayout;

public class MainPanel extends JPanel{
	/*
	 * Konstanten
	 */
	final Point windowSize = new Point(800,600);
	final Color backgroundColor = Color.WHITE;
	
	/*
	 * Variablen
	 */
	Image currentImage;
	MediaTracker mt;
	Toolkit toolkit;
	JTextField txt;
	
	/*
	 * Konstruktoren
	 */
	public MainPanel(){
		setLayout(new BorderLayout());
		
		txt = new JTextField("");
		add(txt,BorderLayout.SOUTH);
		
		toolkit = getToolkit();
		mt = new MediaTracker(this);		
		
		setBackground(backgroundColor);
		setSize((int)windowSize.getX(),(int)windowSize.getY());
		
		repaint();
	}
	public void loadNewImage(String path){
		if(currentImage != null)
			mt.removeImage(currentImage);
		
		currentImage = toolkit.getImage(path);
		mt.addImage(currentImage,1);
		txt.setText("Lade Bild...");
		try{
			mt.waitForAll();
		}
		catch(InterruptedException e){System.err.println("Can't wait for images loading");}

		
	}
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		loadNewImage("pics/01.jpg");
		
		txt.setText("Bild pics/01.jpg geladen");
		
		g.drawImage(currentImage,0,0,backgroundColor,this);
		setVisible(true);
	}
}
```


```
<html>
  <head>
      <title>Bildergallerie</title>
  </head>

  <body>
      Bildergallerie
      


          <applet code="system.Bildergallerie.class" width=800 height=600>
          </applet>
  </body>
</html>
```


----------



## L-ectron-X (8. Aug 2004)

Ich habe Deinen Code mal etwas umgestellt. So brachte ich es zum Laufen:

```
/* 
* Quellcode von Bildergallerie.java 
*/ 
package system;

import views.MainPanel;
import javax.swing.JApplet; 

public class Bildergallerie extends JApplet{ 
   //Applet-Methoden 
   public void init(){ 
      //Das MainPanel wird angezeigt 
      getContentPane().add(new MainPanel(this));
   } 
}
```


```
/*
* Quellcode von MainPanel.java
*/
package views;

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

public class MainPanel extends JPanel{
   /*
    * Konstanten
    */
   final Point windowSize = new Point(800,600);
   final Color backgroundColor = Color.WHITE;

   /*
    * Variablen
    */
   private Image currentImage;
   private MediaTracker mt;
   private JTextField txt;
   private JApplet owner;

   /*
    * Konstruktoren
    */
   public MainPanel(JApplet owner){
      this.owner = owner;
      setLayout(new BorderLayout());

      txt = new JTextField();
      add(txt,BorderLayout.SOUTH);

      mt = new MediaTracker(this);

      setBackground(backgroundColor);
      setSize((int)windowSize.getX(),(int)windowSize.getY());

      loadNewImage("pics/01.jpg");
      repaint();
   }
   
   public void loadNewImage(String path){
      if(currentImage != null)
         mt.removeImage(currentImage);

      currentImage = owner.getImage(owner.DocumentBase(), path);
      mt.addImage(currentImage,0);
      txt.setText("Lade Bild...");
      try{
         mt.waitForID(0);
      }
      catch(InterruptedException e) {
         txt.setText("Can't wait for images loading");
      }
   }

   public void paintComponent(Graphics g){
      super.paintComponent(g);

      txt.setText("Bild pics/01.jpg geladen");

      g.drawImage(currentImage,0,0,backgroundColor,this);
      setVisible(true);
   }
}
```
Ich habe allerdings ohne Package-Deklaration kompiliert, weil ich bisher kein Applet mit Package-Deklarationen in einer Webseite eingebunden zum Laufen bringen konnte.
Vielleicht kannst Du mich ja diesbezüglich aufklären.


----------



## Krondor (10. Aug 2004)

Hey super, danke,

ich probiere es direkt mal aus. 

Wenn ich noch was wegen den Packages oder so rausfinde sage ich hier direkt bescheid.

Thx


----------

