# Text vom JTextField auslesen



## Kilinat (14. Apr 2011)

Hallo Leute,

ich häng an einer eigentlich ziemlich einfachen Sache, komm aber nicht weiter.

Ich hab eine Klasse "myPanel" die ich meiner Klasse "myFrame" übergebe. In myPanel befinden sich JTextFields und ich schaffs einfach nicht in der Klasse "Syntax" ein Feld auszulesen. Nur wenn ich schon einen Text mit "setText()" vor Programmstart setze, dann gibt er ihn auch aus. 

Das gleiche (wiederum in der Klasse "Syntax") passiert auch wenn ich einen Text mit "setText()" für eine JArea setzen will. Funktioniert genauso nicht.


```
public class Syntax {
	
	private myPanel panel;
	private String classname;
	private String[] methods;
	private String[] attributes;
	private String[] cParameters;
	private boolean generateSG;
	
	public Syntax(){
		panel = new myPanel();
	}
	
	public void createClassCode(){
		classname = panel.getClassname().getText();
		methods = panel.getMethods().getText().split(";");
		attributes = panel.getAttributes().getText().split(";");
		cParameters = panel.getcParameters().getText().split(";");
		generateSG = panel.getGenerateSG().isSelected();
		
		String t = "public class" + classname + "{";
		
		panel.getArea().append(t);
		
		System.out.println("Klassenname" + getClassname());
		
	}
	
	public String getClassname(){
		return this.classname;
	}

}
```

Könnt ihr mir da vielleicht weiterhelfen ? 

MfG Kilinat


----------



## Quaxli (14. Apr 2011)

Wie wäre es mit einem KSKB, das
a) alles Klassen enthält und
b) kompilierbar ist?


----------



## Kilinat (14. Apr 2011)

```
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class myPanel extends JPanel implements ActionListener{
	JLabel lClassname;
	JLabel lAttributes;
	JLabel lCParameters;
	JLabel lMethods;
	JLabel lGenerateSG;
	
	JTextField classname;
	JTextField attributes;
	JTextField cParameters;
	JTextField methods;
	JRadioButton generateSG;
	
	JButton generate;
	
	JTextArea area;
	
	JPanel einspanel;
	JPanel zwischenpanel;
	
	public myPanel(){
		initialiseComponents();
		setLayout(new BorderLayout());
		
		einspanel = new JPanel(new GridLayout(6,2));
		zwischenpanel = new JPanel();
		einspanel.add(lClassname);
		einspanel.add(classname);
		einspanel.add(lMethods);
		einspanel.add(methods);
		einspanel.add(lAttributes);
		einspanel.add(attributes);
		einspanel.add(lCParameters);
		einspanel.add(cParameters);
		einspanel.add(lGenerateSG);
		einspanel.add(generateSG);
		einspanel.add(zwischenpanel);
		einspanel.add(generate);
		
		add(einspanel, BorderLayout.NORTH);
		add(area, BorderLayout.CENTER);
		
	}
	
	
	
	public void initialiseComponents(){
		lClassname = new JLabel("Klassenname");
		lMethods = new JLabel("Methoden");
		lAttributes = new JLabel("Attribute");
		lCParameters = new JLabel("Konstruktor Parameter");
		lGenerateSG = new JLabel("Setter/Getter generieren?");
		
		classname = new JTextField();
		classname.setText("test");
		attributes = new JTextField();
		cParameters = new JTextField();
		methods = new JTextField();
		generateSG = new JRadioButton();
		
		generate = new JButton("Code generieren");
		generate.addActionListener(this);	
		
		area = new JTextArea();
		
	}


	public JTextField getClassname() {
		return classname;
	}



	public void setClassname(JTextField classname) {
		this.classname = classname;
	}



	public JTextField getAttributes() {
		return attributes;
	}



	public void setAttributes(JTextField attributes) {
		this.attributes = attributes;
	}



	public JTextField getcParameters() {
		return cParameters;
	}



	public void setcParameters(JTextField cParameters) {
		this.cParameters = cParameters;
	}



	public JTextField getMethods() {
		return methods;
	}



	public void setMethods(JTextField methods) {
		this.methods = methods;
	}



	public JRadioButton getGenerateSG() {
		return generateSG;
	}



	public void setGenerateSG(JRadioButton generateSG) {
		this.generateSG = generateSG;
	}



	public JButton getGenerate() {
		return generate;
	}



	public void setGenerate(JButton generate) {
		this.generate = generate;
	}



	public JTextArea getArea() {
		return area;
	}



	public void setArea(JTextArea area) {
		this.area = area;
	}



	public JPanel getEinspanel() {
		return einspanel;
	}



	public void setEinspanel(JPanel einspanel) {
		this.einspanel = einspanel;
	}



	@Override
	public void actionPerformed(ActionEvent e) {
		Syntax syntax = new Syntax();
		syntax.createClassCode();
		
		
	}
	

}
```


```
import java.awt.Container;

import javax.swing.JFrame;


public class KlassengeneratorFrame extends JFrame{
	
	private myPanel panel;
	
	public KlassengeneratorFrame(){
		setTitle("Klassengenerator v1.0");
		setSize(800,600);
		
		panel = new myPanel();
		Container cp = getContentPane();
		cp.add(panel);
		
		setResizable(false);
		setVisible(true);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		KlassengeneratorFrame kgf = new KlassengeneratorFrame();
		kgf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
			
	}

}
```


----------



## SlaterB (14. Apr 2011)

ohne die Klasse myPanel zu posten?
extrem dringender Tipp: Klassen groß schreiben, Variablen klein!

vermutetes Problem:
es gibt mehrere Objekte der myPanel-Klasse oder mehrere TextFelder darin, z.B. im Konstruktor gleichnamige lokale Variablen wie Klassenattribute definiert,
einige werden in der GUI angezeigt und durch Eintippen befüllt, andere bleiben leer,
ein Hinweis wäre, wenn der setText()-Text dann in der GUI nicht erscheint?

idealerweise immer vollständige kleine Programme posten, EIN EINZELNES Textfeld reicht als Test


----------



## Quaxli (14. Apr 2011)

Einfach mal den Mauszeiger drauf stehen lassen. 
(KSKB = kleines, selbständig kompilierbares Beispiel)


----------



## Kilinat (14. Apr 2011)

SlaterB hat gesagt.:


> ohne die Klasse myPanel zu posten?
> extrem dringender Tipp: Klassen groß schreiben, Variablen klein!
> 
> vermutetes Problem:
> ...



Ah, ich darf in der Klasse "Syntax" kein neues Object erstellen... Aber wie kann ich dann darauf zugreifen ?


----------



## SlaterB (14. Apr 2011)

myPanel ActionListener erzeugt neues Syntax, dieser ein neues zweites myPanel
-> wie vermutet gibt es mehrere myPanel

> Aber wie kann ich dann darauf zugreifen ? 
myPanel übergibt sich selber als Parameter im Konstruktor von Syntax


----------



## Kilinat (14. Apr 2011)

Daaankeschöön, Problem gelöst 

PS: Kann ich eine JTextArea so definieren, dass man nicht rein schreiben kann ?


----------



## SlaterB (14. Apr 2011)

setEditable(false);
oder ähnliches


----------



## Kilinat (14. Apr 2011)

Danke


----------

