# JTextArea befüllen



## Lautsprecher (2. Juli 2007)

Hallo,
ich stehe mal wieder auf dem Schlauch, vielleicht kann mir jemand von Euch weiterhelfen.

Ich habe 5 buttons in meiner Applikation die unterschiedlich beschriftet sind.
Wenn der Anwender auf einen Button klickt, soll der Text ausgelesen werden und in eine andere Komponente eingelesen werden. Dafür favorisiere ich momentan immer noch die JTextArea.
Stelle mir das ganze ähnlich wie beim VB vor: mit Listbox.addText("Hier soll der Text vom Button drin stehen"), etc.

Frage? funktioniert das auch bei Java? wenn ich JTextArea.add("Einen String übergebe") mache, bekomme ich immer die Fehlermeldung, dass dies nicht funktioniert.

Wenn ich JTextArea.setText("Hier steht ein Text drin"); mache, wird dieser Text beim nächsten Aufruf wieder gelöscht.
Er sollte aber stehen bleiben und den Neuen Text unten anhängen.

Wenn dies klappt und der Anwender die JTextArea befüllt hat, soll er ganz gezielt per Mausklick eine Zeile anklicken können und dieser Text soll dann wieder ausgelesen werden.......


----------



## zerix (2. Juli 2007)

Hallo,

JTextArea hat noch die Methode 
	
	
	



```
append(String s)
```
, mit dieser kann man Text der Area hinzufügen.

MFG

zEriX


----------



## MeinerEiner_80 (2. Juli 2007)

Lautsprecher hat gesagt.:


> Wenn ich JTextArea.setText("Hier steht ein Text drin"); mache, wird dieser Text beim nächsten Aufruf wieder gelöscht.
> Er sollte aber stehen bleiben und den Neuen Text unten anhängen.



Dafür gibts auch die Methode append(String str);
@Lautsprecher: Für solche einfache Sachen gibts auch die API Documentation 
http://java.sun.com/javase/6/docs/api/
Da würde man auch zum Beispiel gleich sehen, warum JTextArea.add("ein String") nicht funktionieren kann...


*grüssle*
MeinerEiner

Edit: Noch garnet 10 Uhr, und Zerix ist trotzdem mal wieder schneller


----------



## Lautsprecher (2. Juli 2007)

Hallo Danke Euch,
das hat wunderbar geklappt. Jetzt spiele ich gerade mit der JList.......
hier habe ich das gleiche Problem, dass er nur eine Zeile einliest und diese dann wieder überschreibt....


```
ftext = (e.getActionCommand());  /* übergebe den Namen des Buttons in String Variable */
  Vector fehlercode =  listebefuellen();


........

fehlercode.add(ftext);

....

    jListFC.setListData(fehlercode);
```
 
Grüße


----------



## zerix (2. Juli 2007)

Poste mal bitte mehr Quelltext.


----------



## Lautsprecher (2. Juli 2007)

Hallo,....


```
button.addActionListener(new java.awt.event.ActionListener() 
{
public void actionPerformed(java.awt.event.ActionEvent e)
{
if(e.getActionCommand().equals(e.getActionCommand()));
{	
ftext = (e.getActionCommand());
	Vector fehlercode =  listebefuellen();
	 jListFC.setListData(fehlercode);
	}
	}
	  });	
}




protected Vector listebefuellen() 	   {
		  
	   Vector fehlercode = new Vector();
	     fehlercode.add(ftext);
			}
	   return fehlercode;
	   }
```


Wieteres Problem: 
Der Anwender soll auf einen Button drücken und der Text des Buttons, soll dann in der JList ausgegeben werden. 
-> JList soll dynamisch befüllt werden
(man weiß nie wie viele Buttons der Anwender drückt, sprich wieviel Einträge dadurch in der Listbox erscheinen)


----------



## zerix (2. Juli 2007)

Mit der Methode setListData setzt du alle Daten die in der Liste stehen komplett neu, das heißt, dass alle Daten gelöscht werden die vorher drin standen. Du solltest einfach den Vector nicht immer wieder neu erstellen, sondern einfach die String "hinten dran hängen".

MFG

zEriX

@Meiner_Einer
Hattest recht ;-)


----------



## MeinerEiner_80 (2. Juli 2007)

Naja in deiner Methode erstellst du einen neuen leeren Vector und fügst diesem deinen Fehlertext hinzu.. Und dann machst du ein setListData mit eben diesem Vector. 
Sollte doch klar sein, das dann in der Liste nur ein Eintrag vorhanden ist.

Wenn du sowieso nur eine Zeile hinzufügen willst, mach das doch so:

```
(DefaultListModel)model = (DefaultListModel)list.getModel();
model.addElement("der fehlertext");
```
evt. noch ein fireIntervallAdded() aufrufen, aber ich glaube eher nicht

*grüssle*
MeinerEiner


----------



## Lautsprecher (2. Juli 2007)

?

mh also irgendwie komme ich immer noch nicht weiter!

habe jetzt mal importiert und deklariert:

import javax.swing.ListModel;
private ListModel defaultListModel = null;

aber irgendwie kommt es mir vor, als wenn die Befehle nicht erkannt werden.

bei deinem Ausdruck
(DefaultListModel)model = (DefaultListModel)list.getModel();
model.addElement("der fehlertext");

motzt er am DefaultListModel? Fehlt da denn noch ein import?

außerdem - was bedeutet getModel()  worauf bezieht er sich da?!


----------



## zerix (2. Juli 2007)

Ja, der Import des DefaulListModels fehlt.


```
import javax.swing.ListModel;
private ListModel defaultListModel = null;
```
Warum  machst du das eigentlich? DefaultListModel ist eine Klasse und du legst hier ein Variable an, das so heißt. Das kann so nicht funktionieren. Man kann auch nicht nach Variablen casten, zumindest denke ich, dass du das vor hattest, wenn ich mir das so anschaue.

MFG

zEriX


----------



## MeinerEiner_80 (2. Juli 2007)

Lautsprecher hat gesagt.:


> ?
> 
> außerdem - was bedeutet getModel()  worauf bezieht er sich da?!




Wie bei anderen Swing- Komponenten auch werden die Daten nicht selbst in der View Komponente, also der Liste, gehalten, sondern in einem separatem Model 
(Stichwort Model-View-Control Pattern http://de.wikipedia.org/wiki/Model_View_Controller)
Ich greife hier auf eben dieses Model zu, und füge da die Daten ein..

*grüssle*
MeinerEiner


----------

