Variablenwert wird nicht richtig zurückgegeben

  • Themenstarter Themenstarter CaptnSebi
  • Beginndatum Beginndatum
C

CaptnSebi

Gast
Moinmoin!

Ich arbeite gerade an einem Programm, das grob gesagt erst einmal einen Text auf mehreren Seiten ausgeben soll. Jede Seite ist ein JPanel, das den Text formatiert und dann den fehlenden Text, der nicht mehr auf diese Seite gepasst hat, zurückgeben soll (Falls kein Resttext übrig ist wird "-1" zurückgegeben). Die Formatierung geschieht in der
Java:
paintComponent
- Methode.
Die Seiten werden in einer Klasse verwaltet, die der ersten Seite den Text übergibt und dann den Resttext für die zweite Seite abfragt, nach diesem Schema:

Java:
Vector<Seite> v = new Vector<Seite>();

v.addElement(new Seite(text));
this.add(v.lastElement());

while (v.lastElement().getRest().compareTo("-1")!=0) {
v.add(new Seite(v.lastElement().getRest()));
this.add(v.lastElement());
}

Mein Beispieltext ist deutlich länger als 1 Seite, trotzdem wird aber schon von der ersten Seite "-1" zurückgegeben. Lasse ich aber mit
Java:
 System.out.println
den Resttext direkt von der Seitenklasse ausgeben, wird dies völlig korrekt gemacht.

Etwas lange Erklärung für das Problem, ich hoffe man kanns verstehen! Über eure Hilfe wäre ich sehr dankbar, ich komme hier echt nicht weiter.

Dankeschön schon mal, Sebi
 
Der Text soll auf mehrere Seiten, also mehrere JPanels aufgeteilt werden. Die JPanels sind nebeneinander und haben so ca das normale Din-Seitenformat.
 
In der paintComponent wird der Ausgangstext auseinandergenommen, ich habe noch mehrere Formatierungs-Tags drin die ausgewertet werden.
Also der Ausgangstext wird Zeichen für Zeichen durchlaufen, wenn die Zeile nicht mehr auf die Seite passen würde (also wenn der Höhen-Index, auf den gezeichnet werden soll größer ist als die Höhe der Seite), dann werden die verbleibenden Zeichen in eine Variable "resttxt" gespeichert, die in einer Rückgabemethode
Java:
protected String getRest() {
	return resttxt;
}
zurückgegeben wird.
 
Also ich würde drauf tippen, dass es am compareTo liegt, weil diese Methode, soweit ich weiß, einen lexikographischen Vergleich durchführt.
D.h. sie vergleicht sie zwei Strings und schaut, welcher "kleiner" ist, und wenn der erste String größer ist, als der zweite (also der, der bei compareTo in klammern steht), gibt es, soweit ich weiß, ne 0 zurück, da das bei dir aber in der regel nicht der fall sein sollte, klappt dein aufruf nich.

Aber nagel dich nich dran fest, is jetz nur ne Vermutung von mir, ich hab compareTo erst einmal benutzt^^
 
Zuletzt bearbeitet:
Also ich habe ja natürlich schon ein paar Tests gemacht, wenn ich von der Seite selbst den Resttext ausgeben lasse, wird das fehlerfrei gemacht. Lasse ich aber den Text aus der anderen Klasse heraus, also über seite.getRest() zurückliefern, steht da "-1". CompareTo scheint also den Vergleich richtig durchzuführen.
Wann genau wird die paintComponent() - Methode von Java ausgewertet? Direkt bei der Erzeugung des Panels oder erst später? Hab mit Repaint()s an verschiedenen Stellen herumexperimentiert, bringt nix.
 
Die Methode wird dann ausgewertet, wenn du sie aufrufst^^

Greifst du vllt. auf irgendwelche Attribute zu, deren Sichtbarkeit nicht richtig gesetzt ist?
 
Die Resttxt-Variable ist global und als protected deklariert, auch alle anderen Variablen sind entweder public oder protected, wobei sich die Klassen natürlich im selben Paket befinden. Irgendwie erschließt sich mir der Sinn nicht, warum die Oberklasse trotzdem den ungeänderten "-1"-Wert übergeben bekommt.

Update: Kann es sein, dass die paintComponent() erst irgendwie zur Laufzeit ausgewertet wird? Ich habe gerade getestet, was ausgegeben wird, wenn ich getRest() erst ganz am Ende, nach dem ganzen anderen Code des Programms aufrufe, und es kommt immer noch "-1" heraus.
 
Zuletzt bearbeitet:

Zurück
Oben