siser Geschrieben 13. Oktober 2008 Geschrieben 13. Oktober 2008 Hi, ich habe ein kleines Problem bei der Ausgabe einer Lineraren Liste. Ich habe die Methroden die die Liste verwalten deklariert , nur leider weis ich jetzt nicht wie ich diese in das text fenster asugeben lasse. mit println scheint es nicht zu gehen. Es muss ja auch die komplette Liste anzeigen udn nicht nur eine Person. /** * @author * @version */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import if08.guitools.*; import java.io.*; public class Personenliste extends JFrame implements ActionListener{ // Attribute private Person anfang; private Person person; // Konstruktor private JTextField tName, tPersonalnummer; private JList tListe; private JButton beinfuegen; public Personenliste() { super(); this.setTitle("Liniare Liste"); this.setBounds(0,0,650,410); this.setResizable(false); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.initGUI(); this.setVisible(true); anfang=null; } // Methoden private void initGUI() { this.setLayout(null); // Die Textfelder tName = GUIFactory.createTextField(this,"Name",20,40,80,150); tPersonalnummer = GUIFactory.createTextField(this,"Personalnummer",20,70,80,150); // Ein Bereich zur Anzeige der aktuellen Liste tListe = GUIFactory.createList(this,280,40,350,220); // Die erforderlichen Tasten beinfuegen = GUIFactory.createButton(this,"EinfŸgen",20,280,100); beinfuegen.addActionListener(this); } // Ende initGUI public void actionPerformed(ActionEvent e) { Object quelle=e.getSource(); // Wer lšst das ActionEvent aus? if(quelle==beinfuegen) this.einfuegen(person); } public void einfuegen(Person pNeu){ Person aktuell=anfang; if(anfang==null){ anfang=pNeu; } else if(anfang.getPersonalnummer()>pNeu.getPersonalnummer()){ pNeu.setNachfolger(aktuell); anfang=pNeu; } else{ while (aktuell.getNachfolger()!=null && aktuell.getNachfolger().getPersonalnummer()<pNeu.getPersonalnummer()){ aktuell=aktuell.getNachfolger(); } pNeu.setNachfolger(aktuell.getNachfolger()); aktuell.setNachfolger(pNeu); } } public String toString(){ String s = ""; return s; } public void ausgabe(){ tListe.setListData(this.toString); <- hier weis ich nicht weiter } } public class Person { // Attribute private String name; private int personalnummer; private Person nachfolger; // Konstruktor public Person(String pName, int pNummer ) { name=pName; personalnummer=pNummer; } // Methoden public String getName(){ return name; } public int getPersonalnummer(){ return personalnummer; } public void setNachfolger(Person pNachfolger){ nachfolger=pNachfolger; } public Person getNachfolger(){ return nachfolger; } public String toString(){ return name+"\t"+personalnummer+"\n"; } } Zitieren
flashpixx Geschrieben 13. Oktober 2008 Geschrieben 13. Oktober 2008 Du musst die Methode "toString" passend überladen, damit das println funktioniert. Ich würde Dir aber raten eine generische Klasse für die Liste zu schreiben und dann die toString Methode des Datentyps aufzurufen. Damit ist Deine Liste flexibler HTH Phil Zitieren
siser Geschrieben 13. Oktober 2008 Autor Geschrieben 13. Oktober 2008 ich versteh nicht was du meinst. Ich habe ja ein Liste zb. anton 12|-> berta 14|-> emil17|* Jetzt möcht ich diese ja ausgeben in der Methode Ausgabe. Angezeigt werden soll es in dem Listenfeld tListe. Bis jetzt hatte ich es immer mit einem Array gelöst und das Array dann in die tListe geschrieben. Nun ist das aber kein array. Es gibt ja nicht nur eine person sondern mehrere, sodass ich gerade nicht weis wie ich das ausgeben kann. Ich dahcte erst an printLn aber dann wird dochnicht in die tListe eingetragen oder? Bei Array verwendung hatte ich dann hinterher in der Liste schöne meine Daten stehen. Zitieren
Dragon8 Geschrieben 14. Oktober 2008 Geschrieben 14. Oktober 2008 Also entweder, du erzeugst dir in der Methode ausgabe() ein Arry, in dem alle Elemente enthalten sind, die in die Liste eingetragen werden sollen, und übergibst dieses Array dann der setListData(Object[]) Methode. Oder du erzeugst dir ein Objekt der Klasse DefaultListModel. Die Datenhaltung in der JList geschieht nämlich über ein sogenanntes ListModel. Eine Standardimplementierung für den Eigengebrauch stellt das DefaultListModel zur Verfügung. Diese Model hat dann auch eine Methode addElement(Object) mit der du nacheinander jedes einzelne Element dem Model, und damit der Liste, hinzufügen kannst. Dein eigenes Model musst du deiner Liste entweder beim Erzeugen dem Konstruktor mitgeben oder über die Methode setModel(ListModel) bekannt machen. Zitieren
flashpixx Geschrieben 14. Oktober 2008 Geschrieben 14. Oktober 2008 Ich würde dann noch eher zu einem Iterator greifen. Aber wie im OP beschrieben, soll die Ausgabe in einem Textfeld geschehen, d.h. die Liste muss einen String liefern und hierzu wäre dann die Methode "toString()" zu überladen Phil Zitieren
Dragon8 Geschrieben 14. Oktober 2008 Geschrieben 14. Oktober 2008 Aber wie im OP beschrieben, soll die Ausgabe in einem Textfeld geschehen, d.h. die Liste muss einen String liefern und hierzu wäre dann die Methode "toString()" zu überladen Phil Wo wurde das denn geschrieben? Also ich lese da die ganze Zeit nur was von nem Listenfeld. Und nen Iterator ist zwar schön und gut, aber wenn eine Lineare Liste selbst erstellt werden soll, und so wie es aussieht, siser nicht so viel Ahnung von Java hat, wäre der wohl ein wenig zu overpowered. Dann lass ihn lieber anfangen. Zitieren
siser Geschrieben 14. Oktober 2008 Autor Geschrieben 14. Oktober 2008 Also ich habs jetzt hinbekommen indem ich die Liste durhc ein TextArea ersetz habe und dann per println ausgegeben. In JList hatte er letzlich alles aneinander geschrieben, zumal ich vergaß eine Person zu erzeigen. Deshalb hatt er mir auch nichts ausgegeben da ich Person anfang=null gesetz hatte^^ Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.