# JApplet einbinden in HTML



## mar (3. Mai 2010)

Hallo @ all

kann mir jemand helfen 
wie binde ich den dieses JApplet in eine Webside 
ein. SOS

Brauche eure Hilfe 
Danke

```
import  java.awt.*;
import java.awt.Color;
import java.awt.Font;
import javax.swing.JApplet;

public class ji extends JApplet implements Runnable{
 
    Thread thread = null;
    String text;
    int width;
    int height;
    int bg_red, bg_green, bg_blue;
    int fg_red, fg_green, fg_blue;
    int font_size;
    int x,y;

    @Override
    public void init() {
        // Parameter der HTML Seite
        text = getParameter("TEXT");
        width = Integer.valueOf(getParameter("WIDTH")).intValue();
        height= Integer.valueOf(getParameter("HEIGHT")).intValue();
        bg_red=Integer.valueOf(getParameter("BG_RED")).intValue();
        bg_green=Integer.valueOf(getParameter("BG_GREEN")).intValue();
        bg_blue=Integer.valueOf(getParameter("BG_BLUE")).intValue();
        fg_red=Integer.valueOf(getParameter("FG_RED")).intValue();
        fg_green=Integer.valueOf(getParameter("FG_GREEN")).intValue();
        fg_blue=Integer.valueOf(getParameter("FG_BLUE")).intValue();
        font_size=Integer.valueOf(getParameter("font_size")).intValue();


        // Position festlegen

        x=width;
        y=height/2;


        // farben für den Ticker setzen
        setBackground(new Color(bg_red,bg_green,bg_blue));
        setForeground(new Color(fg_red,fg_green,fg_blue));
        setFont(new Font("Monospaced", Font.BOLD,font_size));
    }
      //Thread starten

    @Override
    public void start(){
     if (thread== null){
         thread= new Thread(this);
         thread.start();
     }
     }

    // Thread beenden

    @Override
    public void stop(){
         if (thread != null){
             thread.interrupt();
             thread=null;
     }
     }

    // Ticker vorrücken alle 100 ms

    public void run(){
        while(thread.interrupted()== false){
              try{
                  // vorrücken
                  x= 5;
                  //neuzeichnen
                  repaint();

                  // warten
                  thread.sleep(100);

              }catch (InterruptedException e){
                      return;
     }
     }
     }



    // zeichnen Ticker

    @Override
    public void paint(Graphics gc){

        gc.clearRect(0, 0, width, height);
        FontMetrics fm =  gc.getFontMetrics();
     if (x < fm.stringWidth(text))
         x=width;

        // neue Position
       gc.drawString(text, x, y);

    }
}
```


----------



## L-ectron-X (3. Mai 2010)

```
<html>
<head>
<title>Ein Titel für die Webseite</title>
<body>
<applet code="ji.class" width="800" height="500">
<param name="TEXT" value="Ein Text, wofür auch immer">
<param name="WIDTH" value="100">
<param name="HEIGHT" value="100">
<param name="BG_RED" value="FF0000">
<param name="BG_GREEN" value="00FF00">
<param name="BG_BLUE" value="0000FF">
<param name="FG_RED" value="880000">
<param name="FG_GREEN" value="008800">
<param name="FG_BLUE" value="000088">
<param name="font_size" value="16">
</applet>
</body>
</html>
```


----------



## mar (4. Mai 2010)

Hallo 
Danke für die Antwort 
wenn ich es so einbinde erscheint nur ein grauer Hintergrund
brauche deine Hilfe
Gruß


----------



## L-ectron-X (4. Mai 2010)

Ähm, ja...
...mein Fehler. 


```
<html>
<head>
<title>Ein Titel für die Webseite</title>
<body>
<applet code="ji.class" width="800" height="500">
<param name="TEXT" value="Ein Text, wofür auch immer">
<param name="WIDTH" value="100">
<param name="HEIGHT" value="100">
<param name="BG_RED" value="33">
<param name="BG_GREEN" value="55">
<param name="BG_BLUE" value="88">
<param name="FG_RED" value="88">
<param name="FG_GREEN" value="255">
<param name="FG_BLUE" value="33">
<param name="font_size" value="16">
</applet>
</body>
</html>
```


----------



## mar (4. Mai 2010)

Hallo 
hast du das applet mal ausprobiert 
ich kriege immer wieder nur das graue Feld
Gruß
kannst du das mal bitte ausprobieren


----------



## L-ectron-X (4. Mai 2010)

Nachdem du meinen ersten Beitrag bemängelt hast, habe ich das Applet kompiliert und dafür das Applet-Tag angepasst und natürlich ausprobiert. Bei mir hat's funktioniert. Was zeigt denn deine Java-Console für eine Fehlermeldung?


----------



## mar (5. Mai 2010)

Hallo 
Danke erstmal,
bei mir läuft der Text nicht durch, und es wird mir keine Fehlermeldung angezeigt
Danke 
Gruß


----------



## L-ectron-X (5. Mai 2010)

Das hat dann aber nichts mehr mit dem Einbinden in eine HTML-Datei zu tun. Deinen Code habe ich nicht geprüft.


----------



## mar (5. Mai 2010)

Hallo 
ich weiss 
kannst du vl mal ein Blick drüber werfen 
wäre super 
Danke


----------



## Tomate_Salat (5. Mai 2010)

mar hat gesagt.:


> ```
> FontMetrics fm =  gc.getFontMetrics();
> if (x < fm.stringWidth(text))
> x=width;
> ```



Eventuell deswegen, weil das wahrscheinl. zu 100% immer [c]true[/c] ist und die Zeile an sich so keinen wirklichen Sinn macht.

MFG

Tomate_Salat


----------



## L-ectron-X (5. Mai 2010)

Das überarbeitete Applet:

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

public class TickerApplet extends JApplet implements Runnable {

    private Thread thread;
    private String text;
    private int width, height;
    private int bg_red, bg_green, bg_blue;
    private int fg_red, fg_green, fg_blue;
    private int font_size;
    private int x, y;
    private FontMetrics fm;

    @Override
    public void init() {
        // Parameter der HTML Seite
        text = getParameter("TEXT");
        bg_red=Integer.valueOf(getParameter("BG_RED")).intValue();
        bg_green=Integer.valueOf(getParameter("BG_GREEN")).intValue();
        bg_blue=Integer.valueOf(getParameter("BG_BLUE")).intValue();
        fg_red=Integer.valueOf(getParameter("FG_RED")).intValue();
        fg_green=Integer.valueOf(getParameter("FG_GREEN")).intValue();
        fg_blue=Integer.valueOf(getParameter("FG_BLUE")).intValue();
        font_size=Integer.valueOf(getParameter("font_size")).intValue();
        
        width = getSize().width;
        height = getSize().height;

        // Startposition für den Text setzen
        x = width;
        y = height/2;
        
        // farben für den Ticker setzen
        setBackground(new Color(bg_red, bg_green, bg_blue));
        setForeground(new Color(fg_red, fg_green, fg_blue));
        setFont(new Font("Monospaced", Font.BOLD, font_size));
        
        fm = getFontMetrics(getFont());
    }
    
    //Thread starten
    @Override
    public void start() {
        if (thread == null) {
            thread = new Thread(this);
            thread.start();
        }
    }

    // Thread beenden

    @Override
    public void stop() {
        if (thread != null) {
            thread.interrupt();
            thread = null;
        }
    }

    // Ticker vorrücken alle 100 ms

    public void run() {
        while(!thread.isInterrupted()) {
            try{
                //Text auf Startposition zurücksetzen, wenn er aus dem Bild gelaufen ist
                if (x < -fm.stringWidth(text)) {
                    x = width;
                }
            
                // vorrücken
                x -= 5;
                
                //neuzeichnen
                repaint();

                // warten
                thread.sleep(100);

            }
            catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    // zeichnen Ticker
    @Override
    public void paint(Graphics gc) {
        gc.clearRect(0, 0, width, height);

        // neue Position
        gc.drawString(text, x, y);
    }
}
```

Die überarbeitete HTML-Datei:

```
<html>
<head>
<title>Ein Titel für die Webseite</title>
<body>
<applet code="TickerApplet.class" width="800" height="500">
<param name="TEXT" value="+++ Java-Forum.org - Java programmieren aus Leidenschaft +++">
<param name="BG_RED" value="33">
<param name="BG_GREEN" value="55">
<param name="BG_BLUE" value="88">
<param name="FG_RED" value="88">
<param name="FG_GREEN" value="255">
<param name="FG_BLUE" value="33">
<param name="font_size" value="16">
</applet>
</body>
</html>
```


----------



## mar (5. Mai 2010)

Hallo 
Danke di res läuft wunderbar 
nöch eine frage habe ich ist es möglcih auch 
eine Datei auszulesen 
Danke 
Gruß
1000 Dank


----------



## L-ectron-X (6. Mai 2010)

Ja, das geht. Wenn du sagst, was du genau vor hast, schreibe ich dir ein Beispiel.


----------



## mar (6. Mai 2010)

Hallo super 
das du mir so hilfst 
ich will erreichen das das Applet sich 
aus einer .txt Datei den Text rausholt 
der aktuell eingetragen worden ist 
das wäre super wenn du mir da helfen würdest 
Gruß 
Danke


----------



## L-ectron-X (6. Mai 2010)

Wo genau liegt diese Textdatei, bzw. soll sie liegen, wenn das Applet mal online steht?


----------



## mar (6. Mai 2010)

Hallo 
auf dem Server denn Später
im Intranet auf einer Windowsfreigabe
Danke dir 
1000 Dank


----------



## Tomate_Salat (6. Mai 2010)

er wollte einen (relativen) Pfad wissen :-/


----------



## mar (6. Mai 2010)

Hallo sorry 
//kup/test.txt/
danke


----------



## L-ectron-X (7. Mai 2010)

Das Applet sieht dann so aus:

```
import  java.awt.*;
import javax.swing.*;
import java.io.*;
import java.net.*;

public class LauftextApplet extends JApplet implements Runnable {

    private Thread thread;
    private String text;
    private URL url;
    private int width, height;
    private int bg_red, bg_green, bg_blue;
    private int fg_red, fg_green, fg_blue;
    private int font_size;
    private int x, y;
    private FontMetrics fm;
    private BufferedReader br;

    @Override
    public void init() {
        // Parameter der HTML Seite
        text = getParameter("TEXT");
        if(text == null) {
            text = "News-Ticker";
        }
        
        String textfile = getParameter("TextFile_URL");
        if(textfile != null) {
            setTickerText(textfile);
        }
        
        bg_red=Integer.valueOf(getParameter("BG_RED")).intValue();
        bg_green=Integer.valueOf(getParameter("BG_GREEN")).intValue();
        bg_blue=Integer.valueOf(getParameter("BG_BLUE")).intValue();
        fg_red=Integer.valueOf(getParameter("FG_RED")).intValue();
        fg_green=Integer.valueOf(getParameter("FG_GREEN")).intValue();
        fg_blue=Integer.valueOf(getParameter("FG_BLUE")).intValue();
        font_size=Integer.valueOf(getParameter("font_size")).intValue();

        width = getSize().width;
        height = getSize().height;

        // Startposition für den Text setzen
        x = width;
        y = height/2;

        // farben für den Ticker setzen
        setBackground(new Color(bg_red, bg_green, bg_blue));
        setForeground(new Color(fg_red, fg_green, fg_blue));
        setFont(new Font("Monospaced", Font.BOLD, font_size));

        fm = getFontMetrics(getFont());
    }
    
    private void setTickerText(String textfile) {
        StringBuilder sb = null;
        
        try {
            url = new URL(getCodeBase(), textfile);
            br = new BufferedReader(new InputStreamReader(url.openStream()));
            
            String line = null;
            sb = new StringBuilder();
            sb.append(this.text);
            while((line = br.readLine()) != null) {
                sb.append(line).append("   +++   ");
            }
        }
        catch(MalformedURLException e) {
            System.out.println("Fehlerhafte URL zur Textdatei!");
        }
        catch(IOException e) {
            System.out.println("Fehler beim Lesen der Textdatei!");
        }
        
        this.text = sb.toString();
    }

    //Thread starten
    @Override
    public void start() {
        if (thread == null) {
            thread = new Thread(this);
            thread.start();
        }
    }

    // Thread beenden
    @Override
    public void stop(){
        if (thread != null) {
            thread.interrupt();
            thread = null;
        }
    }

    // Ticker vorrücken alle 100 ms

    public void run() {
        while(thread != null && !thread.isInterrupted()){
            try{
                //Text auf Startposition zurücksetzen, wenn er aus dem Bild gelaufen ist
                if (x < -fm.stringWidth(text)) {
                    x = width;
                }

                // vorrücken
                x -= 5;

                //neuzeichnen
                repaint();

                // warten
                thread.sleep(100);

            }
            catch (InterruptedException e){
                System.out.println("sleep interrupted");
            }
        }
    }

    // zeichnen Ticker
    @Override
    public void paint(Graphics gc) {
        gc.clearRect(0, 0, width, height);

        // neue Position
        gc.drawString(text, x, y);
    }
}
```

Die HTML-Datei kann dann so aussehen:

```
<html>
<head>
<title>Ticker</title>
<body>
<applet code="LauftextApplet.class" width="800" height="100">
<param name="TEXT" value="Märchenticker - ">
<param name="TextFile_URL" value="Ticker.txt">
<param name="BG_RED" value="33">
<param name="BG_GREEN" value="55">
<param name="BG_BLUE" value="88">
<param name="FG_RED" value="88">
<param name="FG_GREEN" value="255">
<param name="FG_BLUE" value="33">
<param name="font_size" value="16">
</applet>
</body>
</html>
```

Die angehängte Textdatei liegt in diesem Beipsel im Verzeichnis des Applets.
Wenn du die Datei aus einem anderen Verzeichnis laden möchtest, könnte es u.U. Probleme mit den Zugriffsrechten geben und es wird in dem Fall eine AccessControlException geworfen.


----------



## mar (7. Mai 2010)

Hallo 
Danke für deine schnellen antworten
das ist ein super Forum ich werde es gleich mal ausprobieren 
super 
Gruß
1000 Dank 
ich hoffe es trifft so zu wie es in deiner text Datei steht 
darauf werde ich hin arbeiten es ist zwar noch ein langer weg aber 
das ist mein Ziel 
Gruß
1000Dank
:toll:


----------

