Datenstrukturen an neue Klasse übergeben

Ned Nederlander

Aktives Mitglied
Hallo,
ich möchte in meinem Programm über einen Button ein neues Fenster öffnen, und in diesem dann weiterarbeiten. Dieses Fenster soll in einer neuen Klasse entstehen.

Aufrufen will ich dieses neue Fenster mit

neuesFenster f = new neuesFenster();


Ich brauche allerdings Zugriff auf die ganzen Kontainer und Datenstrukturen, die ich im bisherigen Programm erstellt und benutzt habe. Kann ich diese ähnlich wie bei der Parameterübergabe bei einer Funktion an die neue Klasse übergeben? Oder kann ich irgendwie direkt auf meine bisherigen Datenstrukturen(ints, Strings, arrays und auch eigene Datenstrukturen) aus einer anderen Klasse zugreifen?

Ich bin Anfänger und stehe gerade etwas auf dem Schlauch 🙂

Danke für jede Hilfe! 🙂
 
Zuletzt bearbeitet:
Das passiert denn mit dem alten? Du könntest ja ggf die Referenz darauf übergeben und so auf die Werte kommen.
Aber wenn deine Werte mit dennen du arbeitest in einem Fenster gespeichert sind, dann ist was beim Design schief gegangen. Du könntest die ein Model erstellen, was deine Daten enthält und dann jeweils nur die Referenz auf dein Objekt mitgeben.
 
Leider verstehe ich nicht, was du mit Referenz meinst.

Ich habe zum Beispiel in meiner bisherigen Klasse ein Array das Strings enthält. Ich würd dann im nächsten Programmteil in einem neuen Fenster auch auf dieses Array zugreifen oder dieses übergeben.

Mein bisheriges Fenster ist zu diesem Zeitpunkt noch immer geöffnet.
 
du kannst z.B. die Referenz übergeben:

Java:
neuesFenster f = new NeuesFenster(this);

Und im neuen Fenster Code

Java:
public NeuesFenster(AltesFenster altesFenster){
   altesFenster.getsomeValue();
}

Allerdings denke ich mal solltest du dir eher Gedanken drüber machen ob du wirklich die Daten in den Fensterinstanzen halten willst oder nicht lieber auf ein Model zugreifen: Stichwort MVC
 
und in diesem dann weiterarbeiten
Das klingt ganz danach, als würdest du deine "Arbeitsdaten" in der Fenster-Klasse "speichern". Das ist ungünstig.
Versuch mal GUI und "Arbeitsklassen" zu trennen.
Dann hast du deine Arbeitsdaten, sofern du Getter und Setter programmierst in jedem Fenster zur Verfügung.

mfg
 
Die Arbeitsdaten, die ich übergeben will, beschränken sich auf 2 Stück. Deswegen kann ich jetzt nicht mein komplettes Programm umbauen, auch wenn das Design zu wünschen übrig lässt.

Ich würde gerne die Lösung mit der Referenz probieren, allerdings ist mir nicht ganz klar wie das gemeint ist.

[Java]public NeuesFenster(AltesFenster altesFenster){
altesFenster.getsomeValue();
}[/code]

Soll das dann die neue Klasse sein?
Und getsomeValue() ist ne eigene Funktion, die die entsprechenden Werte übergibt?
 
Naja, in dem alten Fenster brauchst du dann:
Java:
public class AltesFenster {
  int wert1; 
  int wert2; //eben die Werte die du haben willst
  public int getWert1() {
    return wert1;
  }
  ...
}
Dann kannst du in dem neuen Fenster mit:
Java:
altesFenster.getWert1();
darauf zugreifen und abspeichern, auswerten, wasauchimmer
 
danke erstmal für die hilfe.

ich hab das jetzt mal genau so probiert, allerdings bekomme ich den fehler;
Java:
non-static method getDatenstruktur() cannot be referenced from a static context

der wert der übergeben werden soll, ist ein array mit von mir selbst definierten datenstrukturen darin.

die funktion, die den wert liefert, habe ich direkt in die alte klasse geschrieben. sie ist nicht static.

das ist die funktion im alten fenster:

Java:
	public Vector<meineDatenstruktur>[] getDatenstruktur(){

		return datenstruktur;
	
	}

und der aufruf im neuen fenster:

Java:
Vector<meineDatenstruktur>[] temp = Fenster.getDatenstruktur();

danke!
 
Zuletzt bearbeitet:
Du musst die Methode auch bei einer Instanz von Fenster aufrufen:
Java:
Fenster.getDatenstruktur(); //falsch
irgendEinInstanz.getDatenstruktur(); //richtiger
 
Ein beispiel hat dir fassy im Post #4 bereits gegeben.
Ansonsten schmeiß alle unnötigen Stellen aus dem Code und stell hier ein KSKB rein.
 
meine neue klasse sieht jetzt so aus:

Java:
public class NeuesFenster{

	public NeuesFenster(Fenster fenster){

		Vector<meineDatenstruktur>[] temp = fenster.getWert();
	



	}
}

in meiner alten klasse hab ich die funktion:

Java:
	public Vector<meineDatenstruktur>[] getWert(){

		return wert;
	
	}

ebenso den aufruf:

Java:
	NeuesFenster m = new NeuesFenster(this);



so werden auch keine fehler gemeldet. wenn ich diesen aufruf allerdings oben in meine menüleiste lege, meldet mir java
"cannot find symbol symbol". macht es einen unterschied, wo ich diesen aufruf ausführe?

danke!
 
hast du noch irgendwo "symbol" als variable ? oder ist 2x symbol hier nur copy paste fehler ?

ansonsten.... wenn du nur getWert vom fenster brauchst, dann übergib auch nur das und nicht das ganze Fenster
 
man sagte mir hier im thread das würde nicht so einfach gehen.

die genaue fehlermeldung lautet:
Java:
cannot find symbol
symbol  : constructor NeuesFenster (<anonymous javax.swing.AbstractAction>)
location: class NeuesFenster 
                                        NeuesFenster r = new NeuesFenster(this);
 
zeig mal die Klasse die [c]NeuesFenster r = new NeuesFenster(this);[/c] aufruft... ist sie vom Typ Fenster ?
 

Neue Themen


Zurück
Oben