OOP Neuling - Werte speichern - übergeben - auslesen
SharpShooter
- java
Hallo zusammen,
habe vor kurzen angefangen mich mit OOP zu beschäftigen. Ich habe jetzt ein kleines Problem. Und zwar habe ich einen Wert in einer Methode (ein String in dem ein Pfad zu einem Bild steht). Ich möchte diesen jetzt auslesen und in der setIcon Funktion einfügen.
Also so sieht es in etwa aus:
String vorname, nachname, wohnort, Fotopfad;
public void abcd (String Name, String Nachname, String Wohnort, String Passfoto)
Name = vorname;
Nachname = nachname;
Wohnort = wohnort;
Passfoto = Fotopfad;
....
jetzt habe ich in der Hauptklasse einen Actionevent (Button) der mir die ganzen Werte in die Strings einliest (von Textfields).
Nun habe ich die Bildklasse. In dieser erstelle ich ein Fenster, in dem dann ein JLabel ist. Das JLabel will ich dann mit dem Bild "Füllen". Dafür habe ich eine Methode erstellt:
public void zeigeBild (String Bildpfad){
Bild.setIcon(new ImageIcon(Bildpfad);
}
Wie bekomme ich jetzt den gespeicherten Wert der Methode abcd ausgelesen und in den "Bildpfad" eingesetzt?
Wenn ich im Actionevent schreibe Bildklasse.zeigeBild(textFeldBildpfad.getText()); funktioniert es wenn ich den Pfad in das Textfeld eingebe und dann den Button klicke. Aber ich möchte erst den Pfad eingeben und "Speichern" klicken. Danach möchte ich einfach auf den "Bild anzeigen" - Button klicken , und das Bild erscheint. Ohne jedes mal wieder den Pfad in das Textfeld einzugeben!
Ich hoffe es war einigermaßen verständlich erklärt!
Vielen Dank!
Tach!
Und zwar habe ich einen Wert in einer Methode (ein String in dem ein Pfad zu einem Bild steht).
"Werte in Methoden" wäre lokale Variablen, die nur zum Berechnen des Ergebnisses verwendet werden. Alle anderen Variablen sind in der Klasse angesiedelt, sprich: das sind deren Eigenschaften.
Ich möchte diesen jetzt auslesen und in der setIcon Funktion einfügen.
Lokale Variablen können nicht ausgelesen werden, weil sie nicht existieren, wenn die Methode gerade nicht ausgeführt wird.
Also so sieht es in etwa aus:
String vorname, nachname, wohnort, Fotopfad;
public void abcd (String Name, String Nachname, String Wohnort, String Passfoto)
Name = vorname;
Nachname = nachname;
Wohnort = wohnort;
Passfoto = Fotopfad;
....
Das sieht seht komisch aus. Üblicherweise erfolgt die Zuweisung andersrum, die übergebenen Parameter werden irgendwohin zugewiesen und nicht ihnen irgendwelche Werte. Das würde auch nur für Referenztypen funktionieren.
> Wie bekomme ich jetzt den gespeicherten Wert der Methode abcd ausgelesen und in den "Bildpfad" eingesetzt?
Wie gesagt, so herum funktioniert das nicht. Du kannst auf Eigenschaften zugreifen (Java-typisch mit Gettern).
> Wenn ich im Actionevent schreibe Bildklasse.zeigeBild(textFeldBildpfad.getText()); funktioniert es wenn ich den Pfad in das Textfeld eingebe und dann den Button klicke. Aber ich möchte erst den Pfad eingeben und "Speichern" klicken. Danach möchte ich einfach auf den "Bild anzeigen" - Button klicken , und das Bild erscheint. Ohne jedes mal wieder den Pfad in das Textfeld einzugeben!
Liest sich so, als ob du ein ViewModel benötigst. Das ist Teil eines gängiges Software-Pattern bei Desktop-Programmen namens MVVM.
dedlfix.
Hallo zusammen,
habe vor kurzen angefangen mich mit OOP zu beschäftigen. Ich habe jetzt ein kleines Problem. Und zwar habe ich einen Wert in einer Methode (ein String in dem ein Pfad zu einem Bild steht). Ich möchte diesen jetzt auslesen und in der setIcon Funktion einfügen.
Also so sieht es in etwa aus:
String vorname, nachname, wohnort, Fotopfad;
public void abcd (String Name, String Nachname, String Wohnort, String Passfoto)
Name = vorname;
Nachname = nachname;
Wohnort = wohnort;
Passfoto = Fotopfad;....
Das Wichtigste hat dedlfix ja schon gesagt. ABER: da du OOP Neuling bist, solltest du das von ihm vorgeschlagene Design-Pattern (er nennt es hier Software Pattern) erstmal ignorieren, das würde dich ziemlich sicher momentan überfordern.
Deshalb hier erstmal etwas "bodenständigere" Tipps. Du übergibst in deiner Methode den Namen, Nachnamen, Wohnort und das Passfoto (oder besser gesagt dessen Pfad) jeweils einzeln. Wenn du nach OOP programmierst, dann ist das sehr schlechter Stil, was du hier tust. Du solltest ab jetzt versuchen immer in Objekten zu denken. Und das bedeutet: wenn du erkennst, dass Variablen irgendwie eine Beziehung zueinander haben, dann gehören sie mir sehr hoher Wahrscheinlichkeit in ein Objekt, d.h. du musst dann dafür eine eigene Klasse erstellen.
In diesem Beispiel erkenne ich sofort ohne nachzudenken: du willst mit Name, Nachname usw. eine \_Person\_ beschreiben. Und eine Person ist ganz eindeutig ein Objekt.
Was du also tun solltest ist, eine Klasse für Personen-Objekte zu erstellen:
~~~java
public class Person {
private String vorname;
private String nachname;
private String wohnort;
//usw.
public Person(String vorname, String nachname, String wohnort) {
this.vorname = vorname;
this.nachname = nachname;
this.wohnort = wohnort;
//Jetzt kann man überall in der Klasse mittels this.variablenName auf die jeweilige Variable zugreifen
}
public String getFullName() {
return this.vorname + this.nachname;
}
Das solltest du dir angewöhnen, denn nur so kannst du die Vorteile von OOP nutzen, nämlich: später Veränderungen sehr leicht einfügen, hohe Wartbarkeit, gut zu testen, Fehler leicht findbar, wiederverwendbar in anderen späteren Programmen.
HalloWhouzuo!
Danke für deine hilfreiche Antwort. Hab mich mal damit beschäftigt und bin jetzt auf die Lösung gekommen!
Ich werd in Zukunft auf deinen Tipp achten!
Danke auch an dedlfix!
Gruß