Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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";

    }

}

Geschrieben

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

Geschrieben

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.

Geschrieben

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.

Geschrieben

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

Geschrieben

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.

Geschrieben

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^^

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...