Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Verhindern das Werte in einem Array verloren gehen
Wie kann ich verhindern, dass Werte die ich in einem Array gespeichert habe verloren gehen, sobald ich wieder in die ursprüngliche Klasse zurückspringe?
Als kleines Beispiel, öffne ich eine Klasse in welcher ich verschiedene Werte errechne. Die Werte speichere ich anschliessend in einem Array. Nun möchte ich die Werte in die ursprüngliche Klasse zurückgeben. Mit einem Get funktioniert dies aber nicht, da die Werte dann bereits wieder weg sind.
Für Inputs wäre ich dankbar.
allgemein zwei Möglichkeiten:
1.
lokal erstellte Daten entweder als Rückgabewert zurückgeben
oder 2.
an einer anderen Stelle länger speichern,
z.B. in einer Exemplarvariable des gerufenen Objektes, welche durch einen folgenden get-Aufruf gelesen wird,
oder alternativ irgendwo sonst in der Welt,
z.B. in einem bestimmten Container-Objekt oder in einer Datenbank
oder gar durch eine set-Operation direkt beim Aufrufer..,
Klasse A ruft Klasse B auf
In Klasse B werden Daten verändert.
Veränderte Daten werden in einem Array in Klasse B gespeichert
Rücksprung (da Klasse B beendet) in Klasse A
Die Daten aus Klasse B sollen in Klasse A verfügbar sein
Problem:
Kann Daten von Klasse B nicht in Klasse A holen (Versuch mit get von Klasse A aus gescheitert).
Danke für die Hilfe...ich hoffe dies reicht als Beispiel
public class Detailoberflaeche {
....
// Action Listener für Abspeichern
ActionListener abspeichern = new ActionListener()
{
public void actionPerformed( ActionEvent e)
{
//Normale Werte ändern
//Tabellenwerte ändern
ModellTabelle tabellenmodell = new ModellTabelle(xmlsax, zaehler);
position = tabellenmodell.getPosition();
werte = tabellenmodell.getWerte();
zaehlerpos = tabellenmodell.getPositionsZaehler();
//Aufruf XML Save
try {
xmlsave = new XmlSave(position, werte, zaehlerpos);
} catch (JDOMException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
}
};
save.addActionListener(abspeichern);
....
modelle = new ModellTabelle(xmlsax, zaehler);
....
}
Klasse ModellTabelle
Code:
class ModellTabelle extends AbstractTableModel {
...
//Position uebergeben
public int[] getPosition() {
return position;
}
//Werte uebergeben
public String[] getWerte() {
return werte;
}
//Zähler für Position uebergeben
public int getPositionsZaehler() {
return zaehlerpos;
}
...
// Jede Zelle ist editierbar
public boolean isCellEditable(int row, int col) {
return true;
}
// Wird aufgerufen, falls der Wert einer Zelle verändert wurde
public void setValueAt(Object value, int row, int col) {
daten[row][col] = value.toString();
//Positionsbestimmung
positionkolonne = (row * 4);
int totalposition = positionkolonne + col;
position [0 + zaehlerpos]= totalposition;
totalposition = 0;
//Wertbestimmung
werte [0 + zaehlerpos] = value.toString();
++zaehlerpos;
}
...
}
So, jetzt habe ich ein hoffentlich verständliches Beispiel gepostet. Ich habe nur die wichtigen Elemente ansonsten wäre das ganze ein wenig kompliziert. Ich hoffe man versteht dieses Beispiel.
Sobald Veränderungen vorgenommen werden, wird die Klasse ModellTabelle aufgerufen. Die Veränderungen werden în den Arrays gespeichert. Sobald ich nun den ActionListener betätige (Save Button) sollten die Daten von den gespeicherten Arrays in den ActionListener gezogen werden, wo sie dann anschliessend via Konstruktor weitergegeben werden an die Klasse XmlSave.
Das holen der Daten von den Arrays zum ActionListener funktioniert aber bereits nicht.
Du kannst dort entweder nen Typecast nach AbstractTableModel draufsetzen (da AbstractTableModel das Interface TableModel implementiert), oder in deinem ModellTabelle auch TableModel implementieren.
EDIT Großer Blödsinn: TypeCast einfach auf ModellTabelle machen, dann passt das auch.
Besten Dank für deine Hilfe! Ich bin mit deiner Hilfe nun einen kleinen Schritt nach vorne gekommen. Habe aber immer noch einige Probleme. Werde mich aber zu einem späteren Zeitpunkt darum kümmern, habe zurzeit noch wichtigere Dinge zu tun.
Auf alle Fälle besten Dank für Deine Hilfe!