# kann nicht auf meine JTextArea zugreifen



## Gast (23. Nov 2004)

Hallo, 
ich habe ein mir unerklärliches Problem:

in einer "Fensterklasse" lege ich mir eine JTextArea an, in die ich später etwas schreiben möchte (automatisch mit append):

Hier der Konstruktor:

```
textfeld=new JTextArea();
		textfeld.setLineWrap(true);
		//textfeld.setSize(150,100);
		textfeld.setBackground(Color.WHITE);
		textfeld.setFont(new Font("SansSerif",Font.PLAIN,15));
		textfeld.append("im Konstruktor");
		//this.setTextfeld(textfeld);
		
		scrollPane=new JScrollPane();
		scrollPane.getViewport().add(textfeld,null);
		getContentPane().add(scrollPane,BorderLayout.CENTER);
```

nun möchte ich aus einer anderen Klasse heraus in einer ActionPerformed auf das Textfeld erneut zugreifen:


```
algFenster.getTextfeld().append("in ActionPeformed Sequence");
```

aber genau das geht nicht. Der String in der letzen Append()-Anweisung wird nicht ausgeführt.
Was ist der Grund dafür??? Das Append im Konstruktor geht noch.

Wer kann mir helfen?


----------



## bygones (23. Nov 2004)

liefert die methode getTextfeld() auch wirklich die JTextArea zurück aus der Frame Klasse ??


----------



## Guest (23. Nov 2004)

ja:


```
public JTextArea textfeld;

public JTextArea getTextfeld() {return textfeld;}
```


----------



## pogo (23. Nov 2004)

was für einen Fehler kommt denn? einfach mal posten


----------



## pogo (23. Nov 2004)

ich wollt garnet zweimal posten, war mein internet


----------



## Guest (24. Nov 2004)

es kommt keine Fehlermeldung. Das ist ja das komische. Es wird einfach nix angezeigt.  :bahnhof:


----------



## Roar (24. Nov 2004)

wird die methode append() überhaupt aufgerufen? setz mal nen out.println() vor die anweisung :-/


----------



## Guest (24. Nov 2004)

ja wird sie. Ich kann auch über getIrgendwas() Werte von der TextArea bekommen, aber ich kann nichts hineinschreiben. Das ist mir unerklärlich. :?:


----------



## Guest (24. Nov 2004)

also ich bin jetzt langsam am Verzweifeln.  :cry: 

Ich habe auch alle show(), visble(), validated() Methoden durch. Selbst wenn ich eine Methode aus ein und der selben Klasse, einmal im Konstruktor und einmal in der AnctionPerformed aufrufe. Nur der Konstruktor funtkioniert. Die TextArea ist da, man kann Werte abfragen, aber nichts einfuegen. Was soll dass?


----------



## pogo (24. Nov 2004)

ge added hast du die text area auch schon auf ein frame???


----------



## Guest (24. Nov 2004)

ja klar, sonst koennte er mir ja auch im Konstruktor nix anzeigen:


```
this.add(textfeld,BorderLayout.CENTER);
```

"this" verweist auf die JPanel Klasse. Ich habe es aber auch schon direkt probiert, also getContentPane().add(...) in der JFrame-Klasse. Geht aber auch nich. :cry:


----------



## bummerland (24. Nov 2004)

am besten zu zeigst mal deinen gesamten code. dann finden wir den käfer schon...


----------



## Guest (24. Nov 2004)

Das Programm ist mittlerweile ganz schön groß, hier sind die betreffenden Klassen :

Klasse des Internen Fenster, indem die JTexArea eingebunden ist:

```
public class AlgFenster extends JInternalFrame implements Printable
{
	//Variable zum Zählen wieviele innere Fenster offen sind
	static int openFrameCount = -1;
	
                //Postion der linken oberen Ecke des Fensters
	static final int xOffset=0,yOffset=20;
	
	//Scrollpane
	private JScrollPane scrollPane;

	//ContentPane des aktuellen Fensters
	public Container cp=getContentPane();

	//Statusleiste anlegen
	public static JLabel statusleiste   = new JLabel();

                //JTextArea anlegen
	public JTextArea textfeld;
   	
   	//Konstruktor
	public AlgFenster()
	{
	
		//Fenster anlegen mit Konstruktor von JInternalFrame
		super("Algorithmus Nr." + (++openFrameCount),
						true, //Größe änderbar
						true,//schliessbar
						true,//maximierbar
						true);//minimierbar
		//Größe und Position des Fensters festlegen
		Dimension size=(this.getToolkit().getScreenSize());
		int sizeBreite=(int)size.getWidth()/2;
		int sizeHoehe=(int)size.getHeight()/2;
		setSize(sizeBreite,sizeHoehe);
		setLocation(sizeBreite+xOffset*openFrameCount,yOffset*openFrameCount-yOffset);

		textfeld=new JTextArea();
		textfeld.setBackground(Color.WHITE);
		textfeld.append("im Konstruktor");
		//textfeld.setEditable(false);

		scrollPane=new JScrollPane();
		scrollPane.getViewport().add(textfeld,null);

		cp.add(textfeld,BorderLayout.CENTER);
		//Statusleiste initialisieren
		statusleiste.setText(" ");
		cp.add(scrollPane, BorderLayout.SOUTH);
		
		anzeigen(); //nur zur Probe, ob hier in textfeld geschrieben wird

	}
	
   public void anzeigen()
{
	textfeld.append("anzeigen()");
}
```

Hauptklasse, in der die Ereignissbehandlung stattfindet


```
public class StructX extends JFrame implements ActionListener
{	
	//Grundfläche für MDI-Anwendung anlegen
	public static JDesktopPane desktop = new JDesktopPane();
	//Fenster im Hauptrahmen:
	private AlgFenster algFenster;
	private AusgabeFenster ausFenster;
	private StructFenster strFenster;

	//Konstruktor
	public StructX()
	{	
		//Fenster anlegen
		ausFenster=new AusgabeFenster();
		algFenster=new AlgFenster();
		strFenster=new StructFenster();
		ausFenster.createAusgabeFrame();
		strFenster.createStructFrame();	
		algFenster.createAlgFrame();
		//Menü und Toolbar erzeugen
		setJMenuBar(Menue.createMenuBar(this));
		getContentPane().add(Toolbar.createToolbar(this),BorderLayout.NORTH);
		//MDI-Anwendung mit Fenstern auf erstelltem Desktop erzeugen		
		getContentPane().add(desktop,BorderLayout.CENTER);
		//Standard-Beenden
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
		
	}

		
	//Ereignissbehandlung; Reaktion auf Menü- und Buttonklicks
	public void actionPerformed(ActionEvent e)
	{
		//Menü-/Buttonaufschrift abfragen
		String kommando=e.getActionCommand();
	
					
		//Sequenz erstellen
		if(kommando.equals("Sequenz"))
		{	
			//neue Sequenz erzeugen
			StructObject seq = new StructSequence();
			// Sequenz zum aktuell ausgewählten Element hinzufügen
			if (strFenster.addStructObject(seq))				
			{	
				//in Statusleiste anzeigen, welches neue Segment erstellt wurde
				StructFenster.statusleiste.setText("neue Struktogramm Sequenz [" + seq.getID() + "]\n"); 
				//wenn Sequenz hinzugefügt, dann Algorithmus schreiben
				//neue Algorithmuszeile erzeugen
				AlgObject aSeq=new AlgSequence(this);
				algFenster.addAlgObject(aSeq);
		------------------>  	algFenster.textfeld.append("HALLO???");
				System.out.println("algFenster.textfeld.append()");
		------------------>	algFenster.anzeigen();
				AlgFenster.statusleiste.setText("neue Algorithmus Sequenz [" + aSeq.getID() + "]\n");
			
			}			
			else
				//Fehler beim Hinzufügen, dann in Statusleise anzeigen
				StructFenster.statusleiste.setText("Fehler beim Hinzufügen einer neuen Sequenz\n");
			//Neuzeichnen des Fenster	
			repaint();
		
		}
```

Die markierten Zeilen gehen nicht. Alles andere funktioniert.
Die anzeigen() im Konstruktor wird ausgeführt, hier in der ActionPerformed jedoch nicht.

Findet jemand den Fehler?


----------

