Wie funktioniert klassenübergreifende Wert-Weitergabe in Java?
Hallo,
ich habe ein Programm in Java geschrieben, um eine Umfrage zu erstellen. Hierbei werden mehrere Fenster während der Umfrage geöffnet (= ich arbeite mit mehreren GUI-Klassen)
Nun habe ich folgendes Problem:
Wenn ich z. B. in der GUI-Klasse 1 ein Attribut meiner Fachklasse über die Get- und Set-Methode verändere und dann versuche in der GUI-Klasse 2 diesen veränderten Wert des Attributs auszulesen (mit der Get-Methode), funktioniert das nicht.
Stattdessen bekomme ich in der GUI-Klasse 2 nur den Wert des Attributs das ursprünglich in der Fachklasse definiert wurde.
Hat hier vielleicht jemand Ahnung wie ich das Ganze lösen kann oder nach welchen Stichworten ich im Internet suchen sollte?
Fachklasse "Eigenschaften" mit 2 Attributen (+ Getter und Setter):
private int mind = 0;
private int behavior = 0;
In der GUI-Klasse 1 werden Fragen anzeigt die über Radiobuttons beantwortet werden können. Über einen JButton werden diese Antworten ausgewertet.
Anmerkung: Ich arbeite hier mit der Variable in der GUI-Klasse 1:
public int temp_rechnung;
Und dem Objekt:
Eigenschaften e1 = new Eigenschaften();
//
btnA = new JButton("Auswertung");
btnA.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//FRAGE 3, hier nur mit einer Antwortmöglichkeit, um Zeichen zu sparen
if(rdbtnJaa3.isSelected() == true) {
temp_rechnung = e1.getBehavior() - 2;
e1.setBehavior(temp_rechnung);
}
GUI-Klasse 2 g2 = new GUI-Klasse 2(); g2.setVisible(true);
btnEndgueltigeAuswertung.setBounds(); contentPane.add(btnEndgueltigeAuswertung); }
In GUI-Klasse 2:
Auch hier wurde die Zeile geschrieben: Eigenschaften e1 = new Eigenschaften();
e1.null_mind(e1.getMind());
e1.null_behavior(e1.getBehavior());
endgueltiges_Profil = e1.zuordnung_profil();
UND GENAU HIER DAS PROBLEM:
Der Wert von z. B. e1.getBehavior() ist 0 und NICHT +2, +1, -1 oder -2
Und das ist ein Problem, weil wenn das der Fall ist, ist es so als hätte der Nutzer nichts beantwortet und ihm wird per Zufall mit den Methoden null_mind und null_behavior entweder +12 oder -12 zugeteilt, um den Wert 0 auszuschließen.
Das muss so sein, weil ich in der Umfrage so arbeite, dass z. B. ein negativer Mind-Wert so interpretiert wird, dass der Nutzer das Profil "Introvertiert" zugeteilt bekommt und beim positiven Wert "Extrovertiert".
Ebenso funktionieren auch alle meine Methoden, das weiß ich sicher. Nur die Werte werden nicht richtig übertragen.
Ich hoffe das konnte mehr Infos geben. Allerdings kann ich versuchen in den Kommentaren noch mehr Details zu geben.
1 Antwort
Du erstellst jedesmal ein neues Objekt:
Eigenschaften e1 = new Eigenschaften();
Objekte sind in ihren Zuständen unabhängig voneinander.
class Apple {
private String color = "green";
public Apple(String color) {
this.color = color;
}
public String getColor() {
return color;
}
}
// main:
Apple apple1 = new Apple("red");
Apple apple2 = new Apple();
System.out.println(apple1.getColor()); // red
System.out.println(apple2.getColor()); // green
Stattdessen solltest du das Objekt nur einmal erstellen und dann an alle anderen Klassen verteilen.
Die GUI-Klassen werden dazu erweitert. Zum einen benötigst du ein Feld mit Getter und zum anderen eine Konstruktorüberladung.
private Eigenschaften eigenschaften;
public Fenster(Eigenschaften eigenschaften) {
this.eigenschaften = eigenschaften);
}
public Eigenschaften gibEigenschaften() {
return eigenschaften;
}
Danach musst du nur noch die Stellen in deinem Code finden, wo du die Fenster erstellst und dort jeweils das eine Objekt weitergeben. Bei der Gelegenheit wäre es zudem günstig, sich nochmal bessere Bezeichner zu überlegen (Eigenschaften ist herrlich nichtssagend), die auch durchgehend konsistent bleiben (z.B. entweder komplett Englisch oder Deutsch).
Im Übrigen kannst du statt mehreren Fenstern auch ein CardLayout verwenden.
https://docs.oracle.com/javase/tutorial/uiswing/layout/card.html