# problem beim auslesen von text aus einem textfeld...



## DarkLord (9. Mai 2004)

ich habe in einem java-applet mehrere textfelder durch eine schleife in einem Array erzeugen lassen.
dies funktioniert auch super, hier der quelltext:


```
TextField x[] = new TextField[anztrack];  
   		for(i=0;i<anztrack;i++) {    
                                     x[i] = new TextField(gga);    
                                     x[i].setBounds(10,hoehe,110,20);    
                                     this .add(x[i]); 
                                     hoehe=hoehe+25;
                                     }
```

wie kann man nun den text aus diesen text feldern wieder auslesen?

normaler weise geht dies ja über die methode getText() in der Form: namedestextfeldes.getText().

das müsste dann, bezogen auf die textfelder in dem array in der form x_.getText() funktionieren. Dies ist aber leider nicht der fall, wo ist der fehler?

(also java gibt keine fehler zurück, aber an der stelle, wo der ausgelesene text erscheinen sollte, wird nichts eingefügt)

gruß DarkLord_


----------



## L-ectron-X (9. Mai 2004)

In einem Array werden Daten im Typ Objekt gespeichert.
Das heißt, wenn Du auf ein Array zugreifen willst, von dem Du weißt, dass dort Textfeld-Objekte gespeichert sind, musst Du die Objekte aus dem Array in den passenden Datentyp casten.

```
textfeld = (JTextField)meinArray[i];
```


----------



## Guest (9. Mai 2004)

wi soll das dann genau aussehen?? //welcher ist der passende datentyp? JTextField?
TextField x[] = (JTextField)new TextField[anztrack];  

->> danke für die schnelle antwort!!


----------



## Beni (9. Mai 2004)

@L-ectorn-X
In _TextField[] x_ ist bereits alles TextField, _x.getText() müsste tatsächlich funktionieren.

@DarkLord
- Kann es sein, dass in den Textfeldern nichts steht? (Also "" zurückgegeben wird).
- Funktioniert die Anzeige auch richtig? (Ruf sie mal mit einem kleinen Text auf, damit das sicher ist)._


----------



## Guest (9. Mai 2004)

also.. in die textfelder hab ich auf jeden fall immer was reingeschrieben - so doof bin selbst ich net  - ich kann auch vorher den wert von i ausdrucken lassen. die anzeige funktioniert 1a spitzenklasse (ich lasse einen html quellcode ausdrucken) 

Ich hab mein bisheriges Ergebnis mal hier hochgeladen:
http://kristina.s4.cybton.com/java/Anztracks.html


----------



## stev.glasow (9. Mai 2004)

Anonymous hat gesagt.:
			
		

> also.. in die textfelder hab ich auf jeden fall immer was reingeschrieben - so doof bin selbst ich net  - ich kann auch vorher den wert von i ausdrucken lassen. die anzeige funktioniert 1a spitzenklasse (ich lasse einen html quellcode ausdrucken)
> 
> Ich hab mein bisheriges Ergebnis mal hier hochgeladen:
> http://kristina.s4.cybton.com/java/Anztracks.html


em: The requested URL /java/Anztracks.html was not found on this server.


----------



## Darki (9. Mai 2004)

neu laden, bitte! hatte aus versehen ne htm datei hochgeladen, aber html geschrieben


----------



## Beni (9. Mai 2004)

Falls du das: _pic.getText() != ""_ immer noch drin hast: bitte lesen :wink: 

Ich nehme mal an, der Code auf deiner Page ist noch aktuell?


```
// textfeld = (JTextField)meinArray[i];
        TextField x[] = new TextField[anztrack];

        for (i = 0; i < anztrack; i++) {
            x[i] = new TextField();
            x[i].setBounds(10, hoehe, 110, 20);
            this.add(x[i]);
            hoehe = hoehe + 25;
        }

        //-----------------------------------------------------------------------------

        if (control == 1) { ...
```

Zuerst erzeugst du neue Textfelder.

Danach überprüfst du, ob der Text erzeugt werden soll, und falls ja, liest du die Textfelder aus.

Aber die Textfelder hast du vor 10 Milisekunden erneuert...

Ein if-else könnte helfen:


```
if( control == 0 ){
	        for (i = 0; i < anztrack; i++) {
	            x[i] = new TextField();
	            x[i].setBounds(10, hoehe, 110, 20);
	            this.add(x[i]);
	            hoehe = hoehe + 25;
	        }
        }

        //-----------------------------------------------------------------------------

        else{ // if (control == 1) {
```

mfg Beni

*[edit]* Und die Textfelder musst du natürlich als Instanzvariablen, und nicht als Methodenvariablen anlegen:


```
public class Anztrack extends Applet{
  private TextField[] textFields;

  public void actionPerformed( ActionEvent e ){
    if( textFields == null ){
      textFields = new TextField[ anztrack ];
      for( ... )
        ...
    }
    else{
      ...

      for( int i = 0; i < textFields.null; i++ )
        remove( textFields[i] );

      textFields = null;
    }
}

}
```

*[/edit]*


----------



## Guest (9. Mai 2004)

das mit den variabelen verstehe ich zwar in der theorie aber deine umsetztung ???


----------



## Guest (9. Mai 2004)

hast du dir den quelltext gezogen und ihn dann entsprechend verändert und dann zum laufen gebracht? dann lad den fertigen kram doch bitte eb mal hoch, damit ich ihn mir ziehen kann.... ich ,der echte Dark, der auch damit angefangen hat, verstehe nach den ganzen änderungen, die meine freundin grad an dem quelltext gemachtr hat, nämlich mein eigenes zeug nich mehr... ....


----------



## Beni (9. Mai 2004)

Probiers mal aus:

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

public class Anztracks extends Applet implements ActionListener {

    TextArea ausgabe;

    TextField band, album, anztracks, pic;

    TextField[] textFields;
    
    Button ok;

  //  int control = 0;

    public void init() {
        band = new TextField("band");
        band.setBounds(10, 30, 110, 20);
        this.add(band);

        album = new TextField("album");
        album.setBounds(130, 30, 110, 20);
        this.add(album);

        anztracks = new TextField("5");
        anztracks.setBounds(250, 30, 30, 20);
        this.add(anztracks);

        pic = new TextField("");
        pic.setBounds(290, 30, 80, 20);
        this.add(pic);

        ok = new Button("OK");
        ok.setBounds(370, 30, 20, 20);
        ok.addActionListener(this);
        this.add(ok);

        ausgabe = new TextArea("quellcode wird hier ausgegeben", 6, 70, 1);
        ausgabe.setBounds(130, 60, 400, 400);

        this.add(ausgabe);

        this.setLayout(null);

    }

    public void actionPerformed(ActionEvent e) {
        
        int hoehe = 90;
        String picture;

        if (!pic.getText().equals("")) {
            picture = pic.getText();
        } else {
            picture = "../nocover.gif";
        }
        // textfeld = (JTextField)meinArray[i];
        
        

        if( textFields == null ){
            int anztrack = Integer.parseInt(anztracks.getText());
            textFields = new TextField[ anztrack ];
            
	        for (int i = 0; i < anztrack; i++) {
	            textFields[i] = new TextField();
	            textFields[i].setBounds(10, hoehe, 110, 20);
	            this.add(textFields[i]);
	            hoehe = hoehe + 25;
	        }
        }

        //-----------------------------------------------------------------------------

        else{ // if (control == 1) {
            int anztrack = textFields.length;
            ausgabe.setText("<html>\n<head>\n\n<link rel=\"stylesheet\" href=\"../../../style/style.css\" type=\"text/css\">\n");
            ausgabe.append("<title>"
                            + band.getText()
                            + " "
                            + album.getText()
                            + "</title></head>\n\n<body bgcolor=\"000000\"><div align=\"right\">\n<td><a href=\"javascript:history.back()\"><img src=\"../back.jpg\" alt=\"back\"></a>\n</div>\n\n");
            ausgabe.append("<p align=\"left\" class=\"name\">" + band.getText()
                    + "[b]& " + album.getText()
                    + "<a name=\"top\"></a>[/b]</p>\n");
            ausgabe.append("<table><tr><td width=\"200\" valign=\"top\" align=\"left\"><img src=\""
                            + picture + "\"></td>\n");
            ausgabe.append("<td>[list=1]<p class=\"tracklist\">\n\n");

            for (int i = 0; i < anztrack; i++) {
                ausgabe.append("<a href=\"#track" + (i + 1) + "\">" + (i + 1)
                        + ". " + textFields[i].getText() + "</a>
\n");
            }

            ausgabe.append("\n</p>[/list]</td></tr></table><hr>\n\n");

            for (int i = 0; i < anztrack; i++) {
                ausgabe.append("\n\n<table><tr><td width=\"50%\" align=\"right\"><p class=\"title\"><a name=\"track"
                                + i
                                + "\" align=\"left\">"
                                + (i + 1)
                                + ". "
                                + textFields[i].getText() + "</a></td>");
                ausgabe.append("\n<td align=\"right\"><a href=\"#top\"><img src=../top.gif></a></td></tr></table>");
                ausgabe.append("\n<p class=\"lyrics\">lyricstrack1
</p><hr>");
            }

            ausgabe.append("\n\n</tr></table>\n</body></html>");
            
            for( int i = 0; i < anztrack; i++ )
                remove( textFields[i]);
            
            textFields = null;
        }
    }
}
```


----------



## L-ectron-X (9. Mai 2004)

@Beni: Hm shit, da habe ich wieder nur mit einem Auge hingesehen. Stimmt, hast Recht.


----------



## DarkLord (10. Mai 2004)

also, ich hab jetzt mein script etwas verändert. nun soll es quasi eine bildergallerie erstellen, das prinzip mit dem ok button und den text feldern ist das gleiche, nur sollen diesmal die urls der bilder statt den titel eingegben werden. hier bekomme ich jedoch beim auslesen des textfeldes *anzpics* einen fehler: 

E:\Java\Pictures\Pictures.java:43: int cannot be dereferenced
            anzpics = Integer.parseInt(anzpics.getText()); 

was will jCreator mir damit sagen?

hier nochmal der komplette Quellcode (könnten noch fehler drin sein, da ich es ja noch nicht ausprobieren konnte...):


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

public class Pictures extends Applet implements ActionListener { 

    TextArea ausgabe; 
    TextField thema, anzpics; 
    TextField[] textFields; 
    Button ok; 
    

  //  int control = 0; 

    public void init() { 
        thema = new TextField("thema"); 
        thema.setBounds(10, 30, 110, 20); 
        this.add(thema); 

        anzpics = new TextField(""); 
        anzpics.setBounds(250, 30, 30, 20); 
        this.add(anzpics); 

        ok = new Button("OK"); 
        ok.setBounds(280, 30, 20, 20); 
        ok.addActionListener(this); 
        this.add(ok); 

        ausgabe = new TextArea("quellcode wird hier ausgegeben", 6, 70, 1); 
        ausgabe.setBounds(130, 60, 400, 400); 

        this.add(ausgabe); 

        this.setLayout(null); 

    } 

    public void actionPerformed(ActionEvent e) { 
         int anzpics;
         int hoehe = 90; 
         int j=0;
	     if( textFields == null ){ 
            anzpics = Integer.parseInt(anzpics.getText()); 
            textFields = new TextField[ anzpics ];  
	            
	           for (int i = 0; i < anzpics; i++) { 
	               textFields[i] = new TextField(); 
	               textFields[i].setBounds(10, hoehe, 110, 20); 
	               this.add(textFields[i]); 
	               hoehe = hoehe + 25; 
	           } 
	      } 

          else{
	       int anztrack = textFields.length; 
	       ausgabe.setText("<html><head><link rel=\"stylesheet\" type=\"text/css\" href=\"../style/pics.css\">");
		   ausgabe.append("<title>[my sweet pandemonium] Pictures -> </title></head><body>");
		   ausgabe.append("<table><tr><td><p class=\"uberschrift\"><nobr>");
		   ausgabe.append("& Pictures : April 2003 (11 Pictures)</nobr></td>");
           ausgabe.append("<td><p align=\"center\" class=\"uberschrift2\"><a href=\"pictures.htm\">Übersicht</a>");
           ausgabe.append("</td></nobr></tr></table>
<table><tr>");

            
             for (int i = 0; i < anzpics; i++) { 
                ausgabe.append("<td><nobr><a href=\"sky0403/sky0403-1.jpg\" target=\"_blank\">");
                ausgabe.append("<img src=\"sky0403/smallsky0403-1.jpg\"></a></nobr></td>"); 
            	j++;
            	
            	if(j==3){
            	ausgabe.append("</tr><tr>");
            	j=0;
            	}
            } 
			ausgabe.append("</nobr></tr></table></body></html>");
         
          }
    }
 }
```


----------



## L-ectron-X (10. Mai 2004)

Du benutzt in einer Zeile den geichen Variablennamen für zwei verschiedene Objekte.
Weiß jetzt nicht, vielleicht schnallt es der Compiler, wenn Du schreibst:

```
anzpics = Integer.parseInt(this.anzpics.getText());
```
Wenn nicht, änderst Du einfach einen der beiden Variablennamen.


----------



## Guest (10. Mai 2004)

ja, damit ist er zufrieden. nur leider taucht dann der nächste fehler in der for schleife auf....

btw: warum hat er es bei dem anderen proggy geschluckt und hier nicht? das war doch nichts anders, ausser dass die variable anztracks und net anzpics hiess...


----------



## L-ectron-X (10. Mai 2004)

Dann solltest Du in Erwägung ziehen, die Variablennamen zu ändern.
Das Problem ist, dass Du einmal eine lokale Variable vom Typ int und zur gleichen Zeit eine Instanz der Klasse JTextField "anzpics" genannt hast. Der Compiler kann jetzt nicht mehr unterscheiden, welches Objekt Du meinst.


----------

