um das ganze OOP Prinzip zu verstehen, habe ich zwei Klassen gemacht, indem ist Instanzvariablen deklariert habe und Methoden, die einen Wert zurückliefen sollen.
Java:
/* Dokument.java */package klassen;publicclassDokument{// VariablendeklarationprivateStringVolume;// NetzwerkverzeichnisprivateString quellOrdner;// QuellverzeichnissesprivateString zielOrdner;// Zielverzeichnis// MethodenpublicStringholeVolume(){// TODO holt das Volume aus den Einstellungenreturn"Volumes:Dokumente";}publicStringholeQuellOrdner(){// TODO holt den Quellordner aus den EinstellungenreturnVolume+":"+"Quelle";}publicStringholeZielOrdner(){// TODO holt den Quellordner aus den EinstellungenreturnVolume+":"+"Ziel";}}
Eine weitere Klasse mit einer Main in der ich dann die Objekte erstelle und auf die Konsole ausgebe.
Dein Programm gibt so garkeinen Sinn und Methoden mit deinen anderen zwei Variablen hast du auch nicht erstellt, wie sollst du da dann was zurück kriegen..
EDIT: Du erstellst ein erstmal leeres Dokument. Das liegt dann im Arbeitsspeicher rum, also kann es zwangläufig keine Pfad- oder Volumenangaben haben, da es ja noch nicht gespeichert wurde.
wtf?
Du hast dir aber schon die Basics angeschaut?
Den String den du in der Methode übergibst mit dem + " " + .. wird nicht der Variable zugewiesen?
Deine Variablen haben kein Wert und den wird auch nichts zugewiesen in deinem Code, der wie ich gesagt habe keinen Sinn ergibt.
Variablen initialisiert man am Anfang, siehe Aufbau einer Klasse.
So das erste habe ich überarbeitet und sieht nun so aus:
Java:
/* Dokument.java*/packagevariablen.klassen;publicclassDokument{// VariablendeklarationprivateString volume;// NetzwerkverzeichnisprivateString quellOrdner;// QuellverzeichnissesprivateString zielOrdner;// Zielverzeichnis// KonstruktorpublicDokument(String volume,String quellOrdner,String zielOrdner){this.volume = volume;this.quellOrdner = quellOrdner;this.zielOrdner = zielOrdner;}// MethodenprivateStringholeVolume(){// TODO holt das Volume aus den Einstellungenreturn"Volumes:Dokumente";}privateStringholeQuellOrdner(){// TODO holt den Quellordner aus den Einstellungenreturn volume +":"+"Quelle";}privateStringholeZielOrdner(){// TODO holt den Quellordner aus den Einstellungenreturn volume +":"+"Ziel";}// Get MethodenpublicStringgetQuellOrdner(){return quellOrdner;}publicStringgetVolume(){return volume;}publicStringgetZielOrdner(){return zielOrdner;}}
Das Testdokument hat noch einen Fehler uns zwar beim Erstellen der Objekte, dort meckert die IDE.
Nun ja, die Meldung hat was mit Datenyp zu tun und wenn ich dort String eintrage, sagt wer die Variable kann nicht gefunden werden. Wenn ich aber eine Variable eingeben, dann kann er das Symbol, also die Variable nicht finden.
Die Syntax für diesen Aufruf ist doch wie folgt:
Dokument fileDokument = new Dokument();
Typ ReferenzObjektvariable = neuesObjekt AusKlasseDokument();
Was nun in den Klammern stehen kann, konnte ich bisher noch nicht so genau feststellen, weil die meisten Beispiele ohne die Parameter sind.
Das Buch Java von Kopf bis Fuß ist für Anfänger auch nicht so ganz ohne, obwohl ich es mochte. Viele Übersetzungsfehler führen dazu das die Beispielprogramme nicht laufen und stundenlanges suchen ist echt ärgerlich. Bin bis Ende Kapitel 4 gekommen.
Jetzt wollte ich die Ausgabe nicht über die Konsole ausgeben sondern über eine GUI.
Java:
/* GUI Ausgabe */packagevariablen.gui;importvariablen.klassen.Dokument;importjava.awt.BorderLayout;importjavax.swing.*;publicclassPostfachextendsDokument{publicstaticvoidmain(String[] args){Postfach gui =newPostfach();
gui.los();}publicvoidlos(){JFrame frame =newJFrame();
frame.setSize(500,170);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// Erzeugt das PanelJPanel panel1 =newJPanel();// panel1.setBackground(Color.white);// Erzeugt eine neue Instanz für den Layoumanager
panel1.setLayout(newBoxLayout(panel1,BoxLayout.Y_AXIS));// Erzeugt Label + TextfelderJLabel laVolume =newJLabel("Volume");JTextField tfVolume =newJTextField(30);
tfVolume.setText(getVolume());JLabel laQuellOrdner =newJLabel("QuellOrdner");JTextField tfQuellOrdner =newJTextField(30);
tfQuellOrdner.setText(getQuellOrdner());JLabel laZielOrdner =newJLabel("ZielOrdner");JTextField tfZielOrdner =newJTextField(30);
tfZielOrdner.setText(getZielOrdner());// Fügt die Textfelder zum Pannel hinzu
panel1.add(laVolume);
panel1.add(tfVolume);
panel1.add(laQuellOrdner);
panel1.add(tfQuellOrdner);
panel1.add(laZielOrdner);
panel1.add(tfZielOrdner);// Fügt das Panel zum Frame
frame.getContentPane().add(BorderLayout.EAST, panel1);
frame.setVisible(true);}}
Leider bleiben die Textfelder leer, ich sehe auch nicht wo der Fehler liegen könnte.
Die getMethoden wurden sogar über die Automatische Vervollständigung gefunden.
Wenn ich den Code wie folgt abändere, sehe ich dann schon Texte im Textfeld.
Sollte aber mit den getMethoden funktionieren
Java:
tfVolume.setText("Wenn das hier als Text steht geht es");
Der Rückgabewert ist ebenfalls ein String, also am Typ kann es auch nicht liegen.
Was sollte deiner Meinung nach die Methode "getVolume()" zurückgeben? Hast du sie in der Klasse Postfach implementiert?
Wahrscheinlich meinst du die "getVolume()" Methode der Klasse Dokument
Java:
Dokument fileDokument =newDokument();//hier erstellst du dein dokument
fileDokument.setVolume("Volumes:Dokumente");// hier setzt du das volume von dem dokument
tfVolume.setText(fileDokument.getVolume());// hier holst du dir das volume von dem dokument
Zumindest wollte ich es erreichen, das der Übergebene "String Wert"
durch die SetMethode in die Variable kommt und durch die getMethode wieder zurück
in dem GUI ausgegeben.
ja aber so wie du es jetzt stehen hast führt er die getVolume() Methode vom aktuellen Objekt Postfach aus.
Man muss angeben von welchen Objekt eine Methode ausgeführt werden soll
Beispiel (vl hilft es ja ;-)):
Bei einem Strategiespiel gibt man auch nicht einfach den Befehl "Bewegen" sondern man muss voher Einheiten makieren.
Sprich dein Befehl ist die Methode und deine Einheit das Objekt.
Du hast das Dokument fileDokument genannt und von diesem willst du das Volume haben
also einfach
Zuerst leitetest du deine Klasse Postfach von der Klasse Dokument ab und dann erstellst du eine Instanz von Dokument in Postfach. Das macht in deinem Fall keinen Sinn. ;-)