# Ausgabe einer Methode schreibt in HTML Datei



## Silkstring (26. Dez 2004)

Hallo erstmal,

ich beschäftige mich erst seit ca. 4 Monaten mit Java, davon erst seit rund einer Woche mit Applets.

Mein Applet liest Eingaben über HTML Formulare ein und gibt diese in einer bestimmten Formatierung aus - grob gesagt geht es um Musiknoten. Nun bin ich vor ein Problem gestoßen für welches ich bisher keine Lösung gefunden habe: nämlich soll die Ausgabe der Noten, also die Formatierung, für den Benutzer speicherbar sein. Aus einem Applet heraus wäre die einzigste Möglichkeit dazu ein Screenshot den man dann erst noch in einem Zeichenprogramm bearbeiten müsste, also habe ich mir gedacht das bei einem Klick auf einen "Speichern"-Button (in der HTML Datei) ein Popupfenster erscheint, welches mit den ausgegebenen Werten des Applets gefüllt wird (Bei diesen handelt es sich Strings aus einem 3dimensionalem Array).

So in etwa habe ich mir das gedacht, nur eben anstatt einem gr.drawString() eine Textausgabe im Sinne von System.out.println... nur eben in die Html Datei :bahnhof: 

```
for (int all = 0; all < 10; all++) {
      for (int i = 1; i < 7; i++) {
        for (int j = 0; j < 40; j++) {
          gr.drawString(sTab[i-1][j][all], (j * 20), (i * 15)+(all*100));
        }
      }
    }
```

Ich hoffe dass dies überhaupt möglich ist! Und falls jemandem etwas dazu einfallen sollte, ich wäre um jede Idee dankbar 

mit freundlichem Gruß,
Anton M.


----------



## Silkstring (10. Jan 2005)

ähm ja, wie ich irgendwie herausgefunden habe ist das irgendwie durch xmls möglich, aber auch nur wenn das programm als servlet und nicht als applet läuft.

jedenfalls bin ich noch nicht weiter, vielleicht habe ich ja glück und finde noch jemanden der mir bei dem problem helfen kann


----------



## Spacerat (11. Jan 2005)

Darf man mal erfahren, wo das Applet im Internet zu finden ist? Ich hab' glaub' ich eine Idee, müsste aber wissen, ob deine HTML-Datei innerhalb oder ausserhalb des Applet-Panels aufgebaut wird. Ich denke da an "Datei: Speichern unter..." (wie z.B. im IE-Menue). Da nur signierte Applets auf das Dateisystem zugreifen dürfen, sollte die HTML-Seite ausserhalb des Applets (z.B. in einem Frame oder per Live-Connect erstellt werden).


----------



## Silkstring (11. Jan 2005)

das mit 'Datei speichern unter...' wäre für mich das optimalste!
Das Applet ist unter http://www.astral-beings.de/tabwriter/TabWriter.html zu finden,
danke für dein interesse 

mit freundlichem Gruß


----------



## Spacerat (11. Jan 2005)

So weit, so gut...

Ich befasse mich mal ein wenig damit... bis denne.


----------



## Silkstring (14. Jan 2005)

Danke sehr im voraus


----------



## Spacerat (15. Jan 2005)

So... 'ne Kleinigkeit kann ich Schon mal anbieten. Und zwar kannst du damit unformatierten Text in die Zwischenablage kopieren (nur Windows? Keine Ahnung...). Ist zwar noch kein speichern unter, aber immerhin schon etwas...


```
<SCRIPT LANGUAGE="JavaScript">
<!--
function ClipBoard()
{
	holdtext.innerText = Tab.getPlainText();
	Copied = holdtext.createTextRange();
	Copied.execCommand("RemoveFormat");
	Copied.execCommand("Copy");
}
//-->
</SCRIPT>

<TEXTAREA ID="holdtext" STYLE="display:none;"></TEXTAREA>
<BUTTON onClick="ClipBoard();">Copy to Clipboard</BUTTON>
```

Die Methode getPlainText() muß von dir noch ins Applet geschrieben werden, und einen String zurück geben. Der kopierte Text ist wie gesagt unformatiert und kann so in z.B. das NotePad (Editor) eingefügt werden (Bearbeiten:Einfügen oder STRG-V) und von dort gespeichert werden.

Aber mal davon ab... Wenn du es schaffst die gesammte String-Ausgabe des Applets in HTML auszugeben, kannst du dein Applet auf die Grösse 1x1 verkleinern, und die Ausgabe einem TABLE überlassen. Da ich nun den Quellcodes deines Applets nicht habe (und auch nicht unbedingt brauche), sauge ich mir dafür mal ein Beispiel aus den Fingern.


----------



## Spacerat (15. Jan 2005)

Da hat er auch schon einen Vorschlag.

Ein Beispiel-HTML-Code:

```
<HTML>
<HEAD>
<TITLE>Java Detection</TITLE>
</HEAD>
<BODY>
<TABLE width="100%" height="30%">
	<TR valign="center">
		<TD align="center">Ermittle Daten über Java und Java3D Umgebung.</TD>
	</TR>
</TABLE>
<FORM action ="#" method="post" name="dtform" id="dtform">
<TABLE width=70% align=center>
	<TR>
		<TD width=50%><P align=center>Java Virtual Machine</P></TD>
		<TD width=50%><P align=center><INPUT type="text" size="20" name="jvm" 

value="0" id="jvm" disabled></P></TD>
	</TR>
	<TR>
		<TD width=50%><P align=center>Java 3D Environment</P></TD>
		<TD width=50%><P align=center><INPUT type="text" size="20" name="j3d" 

value="0" id="j3d" disabled></P></TD>
	</TR>
</TABLE>
</FORM>
<SCRIPT language="JavaScript" type="text/javascript">
<!--
var object;
if (navigator.javaEnabled()) {
	object  = "<APPLET id='Detect' name='Detect' code='JavaDetect.class' codebase='./' 

";
	object += "type='application/x-java-applet' width='1' height='1' scriptable='yes'>";
	object += "<PARAM name='j3d' value='1'>";
	object += "</APPLET>";
	document.write(object);
	document.dtform.j3d.value = document.Detect.getJ3D();
	document.dtform.jvm.value = document.Detect.getJVM();
}
//-->
</SCRIPT>
</BODY>
</HTML>
```

und das verwendete Applet:

```
/*
 * JavaDetect.java
 *
 * Created on 15. Januar 2005, 12:12
 */

import java.applet.*;
import java.util.*;
import javax.media.j3d.*;

/**
 *
 * @author  Spacerat
 */
public class JavaDetect
extends Applet
{
    /**
	 * Comment for <code>serialVersionUID</code>
	 */
	private static final long serialVersionUID = 1L;

    public String getJ3D()
    {
        String rt = "0";
        boolean act = (getParameter("j3d") != null && !getParameter("j3d").equals("0"))? true : false;
        if (act) try {
            Class clazz = Class.forName("javax.media.j3d.VirtualUniverse");
            Map test = VirtualUniverse.getProperties();
            rt = (test.containsKey("j3d.version"))? test.get("j3d.version").toString() : "0";
        } catch (Exception e) {
            rt = "0";
        }
        return rt;
    }

    public String getJVM()
    {
        return System.getProperty("java.vm.version");
    }
}
```

Dieses Applet kommt ganz ohne init(), start() und stop() aus. Für deine Belange brauchst du nur EINE Methode zur Stringausgabe. Der Table innerhalb der Form kommt an den Platz (Position und Grösse) des Applets. Das Applet selber kann versteckt werden. Text-Felder -Areas usw. können über HTML, CSS und Java-Script formatiert und farblich gestaltet werden. Aus Javascript wird schliesslich die Methode zur Text-Ausgabe aufgerufen. D.H. g2.drawString() fällt komplett aus, Das Applet kümmert sich möglicherweise nur um den Text, und Java-Script, HTML und CSS übernehmen den Rest. Die gesamte Ausgabe kann so mit speichern unter auf dem Rechner abgelegt werden. Viel Glück beim tüfteln. Für weitere Fragen bin ich gerne offen.


----------



## Silkstring (31. Jan 2005)

danke für deine mühen spacerat 
entschuldige die späte antwort, ich hatte gerade 2 wochen urlaub und daheim habe ich derzeit kein internet.

ich werde mir das ganze heute abend mal durch den kopf gehen lassen und rumprobieren, das ist übrigens der code meines applets:


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

public class TabWriter extends Applet
{
  String[][][] strArr_tabulatur = new String[6][40][10];
  int takt = 0, zeile = 0;
  boolean check = true, taktCheck = false;
  int xPos = 0, yPos = 0;

  public void paint(Graphics gr)
  {
    setBackground(Color.white);
    makeArray("E","A","D","G","B","e");
    printArray(gr);
  }

  public void makeArray(String aStringE, String aStringA, String aStringD, String aStringG, String aStringB, String aStringeKl)
  {
    if (check == true)
    {

      for (int all = 0; all < 10; all++)
      {
        for (int i = 0; i < 6; i++) {
          for (int j = 0; j < 40; j++) {
            strArr_tabulatur[i][j][all] = "-";
            if (i == 0 && j == 0)
      				strArr_tabulatur[i][j][all] = aStringeKl;
            else if (i == 1 && j == 0)
              strArr_tabulatur[i][j][all] = aStringB;
            else if (i == 2 && j == 0)
              strArr_tabulatur[i][j][all] = aStringG;
            else if (i == 3 && j == 0)
              strArr_tabulatur[i][j][all] = aStringD;
            else if (i == 4 && j == 0)
              strArr_tabulatur[i][j][all] = aStringA;
            else if (i == 5 && j == 0)
              strArr_tabulatur[i][j][all] = aStringE;
          }
        }
      }
      check = false;
    }
  }

  public void printArray(Graphics gr)
  {
    gr.setColor(Color.red);
    gr.fillRect(((takt)*20)-6, yPos*100, 18, 95);
    for (int all = 0; all < 10; all++) {
      for (int i = 1; i < 7; i++) {
        for (int j = 0; j < 40; j++) {
          gr.setColor(Color.black);
          gr.drawString(strArr_tabulatur[i-1][j][all], (j * 20), (i * 15)+(all*100));
        }
      }
    }
  }

  /**
   *
   * @param aStringE
   * @param aStringA
   * @param aStringD
   * @param aStringG
   * @param aStringB
   * @param aStringe
   * @param gr
   */
  public void saitenNummer(String aStringE, String aStringA, String aStringD, String aStringG, String aStringB, String aStringe)
  {
    if (takt == 39)
    {
      zeile++;
      yPos++;
      takt = 1;
      xPos = 0;
    }
    else
      takt++;

    strArr_tabulatur[0][takt][zeile] = aStringe;
    strArr_tabulatur[1][takt][zeile] = aStringB;
    strArr_tabulatur[2][takt][zeile] = aStringG;
    strArr_tabulatur[3][takt][zeile] = aStringD;
    strArr_tabulatur[4][takt][zeile] = aStringA;
    strArr_tabulatur[5][takt][zeile] = aStringE;

    for (int i = 0; i < 6; i++)
    {
      if (strArr_tabulatur[i][takt][zeile].equals("") == true)
        strArr_tabulatur[i][takt][zeile] = "-";
    }

    repaint();
  }

  public void undo()
  {
  	if (takt > 0)
  	{
  	    xPos = xPos - 1;
        takt = takt - 1;
        saitenNummer("-","-","-","-","-","-");
        if (takt > 1 || xPos != 1)
        {
            xPos = xPos - 1;
            takt = takt - 1;
            repaint();
        }
    }
    if (takt == 0 && zeile > 0)
    {
    	xPos = 39;
    	takt = 39;
    	yPos = yPos - 1;
    	zeile = zeile - 1;
    	repaint();
    }
  }

  public void reset()
  {
    zeile = 0;
    check = true;
    takt = 0;
    yPos = 0;
    xPos = 0;
    repaint();
  }
}
```


----------

