Wie funktioniert klassenübergreifende Wert-Weitergabe in Java?


12.07.2020, 20:21

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