# Wie bekomme ich ein Mehrzeiliges JTextField?



## laesperanza (22. Mrz 2011)

Hey Leute,
Ich mache gerade ein Praktikum und soll Java programmieren lernen.
Ich habe mir mit meinem Tutor nun schon einige Sachen angeeignet und bis jetzt immer eine Loesung fuer Probleme gefunden. Doch diesesmal werde ich nicht fuendig und ich habe mich dazu entschlossen selbst auch einmal zu posten 
Also ich benutze Eclipse als Programmieroberflaeche und habe ein Programm entwickelt welches mir den am naechsten an der eingegebenen Zahl liegenden Fakultaetswert ausgibt. 
Fragt nicht nach dem Sinn es ist eine Reine uebung 
Soweit ist alles gut gelaufen und es funktioniert auch alles.
Nun soll aber nicht nur ein wert ausgegeben werden, sondern alle werte die bis zum letzten vorkommen.
Als ersten Schritt soll ich das Programm so umschreiben/umbauen dass in dem JTextField mehrere Zeilen angezeigt werden koennen.
Ich habe das schon mit JTextArea probiert und ich habe versucht eine Scrollbar einzubauen...hat aber nicht funktioniert :noe:
Ich hoffe mir kann jemand helfen 
glg N.D.


```
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;

//import com.apple.eawt.Application;


public class AppWindow extends JFrame 
{
	JTextField 	textfield_schwellenwert;
	JTextField 	areafield_fakultaet;

	JButton		button;
	

	public AppWindow() 
	{
		this.getContentPane().setLayout(null);

		this.initWindow();

		this.addWindowListener(new WindowListener() 
		{

			public void windowClosed(WindowEvent arg0) 
			{


			}

			public void windowActivated(WindowEvent e) 
			{


			}

			public void windowClosing(WindowEvent e) 
			{
				System.exit(0);
			}

			public void windowDeactivated(WindowEvent e)
			{


			}

			public void windowDeiconified(WindowEvent e) 
			{


			}

			public void windowIconified(WindowEvent e) 
			{


			}

			public void windowOpened(WindowEvent e) 
			{


			}

			

		});

	}
	

	protected void initWindow() 
	{
		// Instanzieren:
		
		
		textfield_schwellenwert = new JTextField("hier Wert eingeben");
		areafield_fakultaet = new JTextField("Ergebnis");

		button = new JButton("errechne Maxfakultaet");

		button.addActionListener(new ActionListener() 
		{

			public void actionPerformed(ActionEvent arg0) 
			{
				// TODO Auto-generated method stub
				buttonBerechneClicked();
			}

		});

		// Positionen festlegen
		
		textfield_schwellenwert.setBounds(5,30,375,25);
		areafield_fakultaet.setBounds(5,80,375,25);
		
		
		button.setBounds(200,110,175,30);
		button.setBackground(Color.LIGHT_GRAY);
		// Elemente dem Fenster hinzufügen:
		this.getContentPane().add(textfield_schwellenwert);
		this.getContentPane().add(areafield_fakultaet);
		this.getContentPane().add(button);


		this.pack();
	}

	public void buttonBerechneClicked()
	{
		// Hole Zahl aus Textfeld:
		int schwellenwert = 0;
		try {
			schwellenwert = Integer.parseInt(textfield_schwellenwert.getText());
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			schwellenwert = -1;
		}

		// Falls das n Okay ist:

		if (schwellenwert>=0) {
		// Rechne:
			
			areafield_fakultaet.setText(Long.toString(maxFakultaet(schwellenwert)));
			
		} else {
			areafield_fakultaet.setText("Eingabe ist nicht in Ordnung.");
		}
	}
		
	//methods
	public static long maxFakultaet (int arg)
	{
		// Definition
		int wert = 0;
		int wertalt = 0;
		long Schwellwert = arg;
		long zw = 0;
		//calculation
		while( zw <= Schwellwert)
		{
			wertalt = wert;
			wert++;
			zw = myFakultaet(wert);
		}
			return wertalt;
	}	
		
		
	

	public static long myFakultaet (int arg)
	{
		//Definition 
		int n = arg;
		int Ende = 1;
		long zw = 0;
		//calculation
		zw = n;
		for (int f=n ; f>=Ende ; f--)
		{	
			zw=zw*f;
		}
		return zw;
	}
}
```
gibt es eigl. nicht die moeglichkeit das JTextField dynamisch zu gestalten?


----------



## Runtime (22. Mrz 2011)

Du musst die JTextArea zuerst auf ein JScrollPane, und dann auf das Panel/Fenster adden.


----------



## laesperanza (22. Mrz 2011)

kannst du mir noch genauer erklaeren wie?
ich musste mir mehr oder weniger alles selbst erarbeiten und bin mit den fachbegriffen noch nich so fit...


----------



## Simon_Flagg (22. Mrz 2011)

```
JScrollPane scrpane = new JScrollPane(textarea);
panel.add(scrpane);
```

lg


----------



## Runtime (22. Mrz 2011)

Wie dus schonmal versucht hast, machst du die JTextFields zu JTextAreas und änderst:
[Java]
this.getContentPane().add(textfield_schwellenwert);
[/code]
zu
[Java]
this.getContentPane().add(new JScrollPane(textarea_schwellenwert));
[/code]


----------



## laesperanza (22. Mrz 2011)

danke  ich werds gleich ausprobieren!
und jetz weiss ich was ich falsch gemach hab!
ich habe dass this. nich gehabt und dass JScrollPane falsch eingefuegt....-.-
kann mir jemand genau erklaren was das this macht?


----------



## Runtime (22. Mrz 2011)

Das 'this' ist an dieser Stelle eigentlich irrelevant, aber wenn du zb eine Klassenvariable namens 'var' und eine lokale Variable mit dem selben Namen kannst du mit this.var auf die verdeckte Klassenvariable zugreifen.


----------



## laesperanza (22. Mrz 2011)

egal was ich von den beiden Vorschlaegen benutze, ich bekomme das gleiche ergebnis..und zwar wird mir das ausgabefeld, also das untere (textarea_fakultaet) nicht mehr angezeigt.
kann das an den Bounds liegen??


```
textfield_schwellenwert.setBounds(5,30,375,25);
		textarea_fakultaet.setBounds(5,80,375,25);
		
		
		button.setBounds(200,110,175,30);
		button.setBackground(Color.LIGHT_GRAY);
		// Elemente dem Fenster hinzufügen:
		this.getContentPane().add(textfield_schwellenwert);
		//this.getContentPane().add(new JScrollPane (textarea_fakultaet));
		//this.getContentPane().add(textarea_fakultaet);
		this.getContentPane().add(button);
```
lg


----------



## Gast2 (22. Mrz 2011)

1. dein WindowListener ist total überflüssing du kannst einfach 
	
	
	
	





```
setDefaultCloseOperation
```
 benutzen eine Zeile reicht vollkommen. Was du einfügen musst steht in der API.

2. wie intialisierst du das JTextarea? Du musst denk ich mal der JScrollPane die Bounds setzen, da du ein null Layout hast, wovon ich dringend abrate!


----------



## laesperanza (22. Mrz 2011)

Das mit dem windowListener musste ich so schreiben damit ich erst mal verstehe wie das alles funktioniert  aber danke^^
Hier der ganze Code:


```
import java.awt.*;

	public class Tutorial_1 {

		/**
		 * @param args
		 */
		public static void main(String[] args) {
			AppWindow theAppWindow = new AppWindow();
			theAppWindow.setBounds(10, 10, 400, 180);
			theAppWindow.setTitle("Rechner von Wert zu MaxFakultaet");
			theAppWindow.getContentPane().setBackground(Color.blue.darker()); 

			theAppWindow.setVisible(true);
		}

	}
```


und jetzt die Hauptarebeit 


```
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

//import com.apple.eawt.Application;


public class AppWindow extends JFrame 
{
	JTextField 	textfield_schwellenwert;
	JTextArea 	textarea_fakultaet;

	JButton		button;
	

	public AppWindow() 
	{
		this.getContentPane().setLayout(null);

		this.initWindow();

		this.addWindowListener(new WindowListener() 
		{

			public void windowClosed(WindowEvent arg0) 
			{


			}

			public void windowActivated(WindowEvent e) 
			{


			}

			public void windowClosing(WindowEvent e) 
			{
				System.exit(0);
			}

			public void windowDeactivated(WindowEvent e)
			{


			}

			public void windowDeiconified(WindowEvent e) 
			{


			}

			public void windowIconified(WindowEvent e) 
			{


			}

			public void windowOpened(WindowEvent e) 
			{


			}

			

		});

	}
	

	protected void initWindow() 
	{
		// Instanzieren:
		
		
		textfield_schwellenwert = new JTextField("hier Wert eingeben");
		textarea_fakultaet = new JTextArea("Ergebnis");

		button = new JButton("errechne Maxfakultaet");

		button.addActionListener(new ActionListener() 
		{

			public void actionPerformed(ActionEvent arg0) 
			{
				// TODO Auto-generated method stub
				buttonBerechneClicked();
			}

		});

		// Positionen festlegen
		
		textfield_schwellenwert.setBounds(5,30,375,25);
		textarea_fakultaet.setBounds(5,80,375,25);
		
		
		button.setBounds(200,110,175,30);
		button.setBackground(Color.LIGHT_GRAY);
		// Elemente dem Fenster hinzufügen:
		this.getContentPane().add(textfield_schwellenwert);
		this.getContentPane().add(new JScrollPane (textarea_fakultaet));
		//this.getContentPane().add(textarea_fakultaet);
		this.getContentPane().add(button);


		this.pack();
	}

	public void buttonBerechneClicked()
	{
		// Hole Zahl aus Textfeld:
		int schwellenwert = 0;
		try {
			schwellenwert = Integer.parseInt(textfield_schwellenwert.getText());
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			schwellenwert = -1;
		}

		// Falls das n Okay ist:

		if (schwellenwert>=0) {
		// Rechne:
			
			textarea_fakultaet.setText(Long.toString(maxFakultaet(schwellenwert)));
			
		} else {
			textarea_fakultaet.setText("Eingabe ist nicht in Ordnung.");
		}
	}
		
	//methods
	public static long maxFakultaet (int arg)
	{
		// Definition
		int wert = 0;
		int wertalt = 0;
		long Schwellwert = arg;
		long zw = 0;
		//calculation
		while( zw <= Schwellwert)
		{
			wertalt = wert;
			wert++;
			zw = myFakultaet(wert);
		}
			return wertalt;
	}	
		
	public static long myFakultaet (int arg)
	{
		//Definition 
		int n = arg;
		int Ende = 1;
		long zw = 0;
		//calculation
		zw = n;
		for (int f=n ; f>=Ende ; f--)
		{	
			zw=zw*f;
		}
		return zw;
	}
}
```
so und initialisieren tu ichs fast ganz oben und dann endgueltig weiter unten.
Wieso der ScrollPane?? die is doch in der Textarea...ich muss doch erst mal sagen wo die Textarea ueberhaupt hin soll oder??


----------



## Gast2 (22. Mrz 2011)

laesperanza hat gesagt.:


> Wieso der ScrollPane?? die is doch in der Textarea...ich muss doch erst mal sagen wo die Textarea ueberhaupt hin soll oder??



Nein

guckst du hier 
How to Use Scroll Panes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)


----------



## laesperanza (22. Mrz 2011)

japjap...ich benutze auch BorderLayout .....da is des bissl einfacher...brauch ich keine Scrollbar mehr...leider is damit meine Urspruengliche Frage nicht geklaert...aber das Programm funktioniert
lg N.D.


----------



## xehpuk (22. Mrz 2011)

Wenn du einer Komponente (bei dir das JScrollPane) bei NullLayout keine Bounds setzt, dann wird sie folglich auch nicht angezeigt.

[Wurde übrigens schon oben vorgeschlagen.]

Die JTextArea liegt schließlich im JScrollPane, und nicht umgekehrt.


----------

