Hilfe bei For-Schleife!

Freezer11

Mitglied
Hi leute,

programmiere gerade eine GUI. In einem Frame ist eine Textarea vorhanden. Der Text in dieser Textarea soll dynamisch sein, d.h. durch eine for-Schleife soll, abhängig von einer übergebenen Variable, ein String in die Textarea geschrieben und ausgegeben werden.

Es geht um eine lineare Abschreibung. Die Werte akhk(anschaffungs-/herstellkosten) und dauer werden übergeben. Die Variable linabschr(lineare Abschreibung pro Jahr) errechnet sich.
Das Programm macht an sich alles richtig. Pro Schleifendurchlauf gibt es für jedes Jahr den Restwert aus.
Jedoch überschreibt es bei jedem Durchlauf den bestehenden Text weshalb immer Null dasteht. (Logisch da akhk - (linabschr * dauer) = 0)
Wie kann ich die Zeilen immer um eine Zeile nach unten verschieben bei jedem Durchlauf? Also dass für jedes Jahr der restwert ausgeschrieben wird?

Hier der Quellcode:
Java:
for (x = 1; x<=dauer ; x++) 
{
      double restwert = akhk - (linabschr * x);             // Problem: Text wird immer überschrieben!
      jTextArea1.setText("\n" + x + ". Jahr: " + restwert + " €");
// in Reinschrift bspweise: "1. Jahr: 100 €"
 }

MfG
 
wenn du den ZeilenUmbruch
Code:
"\n\r"
am ende des Textes anfügst.

Sprich kommt dann sowas bei raus :

Java:
1. Jahr 100 €
2. Jahr 200 €

..usw. usw.

ansonsten musst du deine Strings über einen Stringbuilder zu einem String zusammenfügen.

btw. warum schreibst du dir nicht eine statische Methode welche den Text an eine JTextArea übergibt ?

Java:
public static void addToArea(JTextArea area, String...strings){
  StringBuilder builder = new StringBuilder(); 

for(String string : strings){
    builder.append(string + "\n\r");
 }

area.setText(builder.toString());
}
 
Zuletzt bearbeitet:
vielen dank für dein response!

Java:
    for (x = 1; x<=dauer ; x++)
 {
      double restwert = akhk - (linabschr * x);                    
      jTextArea1.setText(x + ". Jahr: " + restwert + " €" + "\n\r");
 }

löst das Problem leider nicht :/

MfG
 
Siehe oben , arbeite mit dem Stringbuilder 😉

es ist durchaus möglich das du den Text als kompletten String in die TextArea einfügen musst, und dies nicht Zeilenweise machen kannst, da sonst der inhalt überschrieben wird.
 
Zuletzt bearbeitet:
habs jetzt versucht mit ner statischen variable die dann ausgegeben werden soll. das problem ist leider immernoch vorhanden.

Java:
    for (x = 1; x<=dauer ; x++) 
{
      double restwert = akhk - (linabschr * x);                    
      String ausgabe = dauer + ". Jahr: " + restwert + " € \n\r";
      jTextArea1.setText(ausgabe);
 }
 
Das Problem ist das der Text der Area immer überschrieben wird, und du nur Text als einen String und nicht Zeilenweise hinzufügen kannst, benutze den StringBuilder

Hier mal ein Beispiel

Java:
import javax.swing.JFrame;
import javax.swing.JTextArea;

public class Foo extends JFrame {
	
	JTextArea area;

	public Foo() {
		setSize(400,300);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setLocationRelativeTo(null);
		
		area = new JTextArea();
		
		add(area);
		setVisible(true);
	}
	
	public void addTextToArea(JTextArea area, String...strings){
		StringBuilder builder = new StringBuilder();
		
		for (int i = 0; i < strings.length; i++) {
			builder.append(strings[i] + "\r\n");
		}
		
		area.setText(builder.toString());
	}
	
	public JTextArea getTextArea() 		{return this.area;}
	 
	 public static void main(String[] args) {
		Foo f = new Foo();
		f.addTextToArea(f.getTextArea(), "1. Jahr 100 €", "2. Jahr 200 €");
	}
	
}

Kopiere das und führe es aus , dann siehtst du was ich meine, da hier mit varargs gearbeitet wird, kannst du der Methode
Code:
addTextToArea()
auch ein Array aus Strings übergeben.

Java:
String[] stringArray = {"1. Jahr 100 €","2. Jahr 200 €","3. Jahr 300 €"};

f.addTextToArea(f.getTextArea(), stringArray);
 
Zuletzt bearbeitet:
du könntest auch einfach die
Code:
.append(String s);
Methode der JTextArea nutzen wenn das angenehmer ist 😉

Um mal deinen code zu verwenden :

Java:
for (x = 1; x<=dauer ; x++) 
{
      double restwert = akhk - (linabschr * x);                    
      String ausgabe = dauer + ". Jahr: " + restwert + " € \n\r";
      jTextArea1.append(ausgabe);
 }
 
Zuletzt bearbeitet:

Zurück
Oben