6 Stimmen

Wie man hashMap mit JTable verwendet

Ich habe eine HashMap, deren Daten ich gerne in einer JTable anzeigen würde. Allerdings habe ich Probleme damit, die Anzahl der Spalten und Zeilen der HashMap sowie die Daten angezeigt zu bekommen. Ich habe eine HashMap, die eine Konto-ID als Schlüssel nimmt und ein Objekt von Studenten enthält, bei dem jeder Schüler Daten wie Name, ID, Alter usw. hat. Wenn ich jedoch die JTable-Dokumente konsultiere, heißt es, dass ich ints für die Zeile und Spalte sowie ein multidimensionales Array vom Typ Object benötigen würde. Wie kann ich das machen? Kann ich meine HashMap in ein multidimensionales Array ändern?

--Edit Ich habe meine Frage bearbeitet, damit sie klarer wird, ich bin ziemlich neu in Java und habe nicht wirklich verstanden, was einige von euch gepostet haben, besonders da die Arbeit, die ich mache, ziemlich mit OO zusammenhängt und das Erfassen von OO-Konzepten meine größte Herausforderung ist.

/Ich habe eine DatenSpeicher-Klasse, der registrierte Benutzer wird der HashMap mit einem Schlüssel hinzugefügt, der seinem Benutzernamen entspricht, der getUser ist./

import java.util.*;

public class DataStorage 
{
    HashMap students = new HashMap();  
    HashMap staffMembers = new HashMap();  
    //Standardkonstruktor
    public DataStorage(){
    }

    public void addStaffMember(Staff aAcc) 
    {
     staffMembers.put(aAcc.getUser(),aAcc);
    }

    public void addStudentMember(Student aAcc)
    {
     students.put(aAcc.getUser(),aAcc);
    }

   public Staff getStaffMember(String user)
   {
   return   staffMembers.get(user);
   }

   public Student getStudent(String user)
   {
    return students.get(user);
   }

   public int getStudentRows()
   {
        return students.size();
   }

}

/**** Dies ist eine Studentenklasse, die von Konto erbt***/

public class Student extends Account {

    private String studentNRIC;
    private String diploma;
    private String gender;
    private double level;
    private int credits;
    private int age;
    private boolean partTime;
    private boolean havePc;
    private boolean haveChild;

    public Student(String n, String nr, String id, String dep, String user, String pass)
    {
        super(n, dep, user, pass, id);
        studentNRIC = nr;
    }

    public void setPartTime(boolean state)
    {
        if(state == true)
        {
            partTime = true;
        }
        else
        {
            partTime = false;
        }
    }

    public boolean getPartTime()
    {
        return partTime;
    }

    public void setHavePc(boolean state)
    {
        if(state == true)
        {
            havePc = true;
        }
        else
        {
            havePc = false;
        }
    }

    public boolean getHavePc()
    {
        return havePc;
    }

    public void setHaveChild(boolean state)
    {
        if(state == true)
        {
            haveChild = true;
        }
        else
        {
            haveChild = false;
        }
    }

    public boolean getHaveChild()
    {
        return haveChild;
    }
    public void setDiploma(String dip)
    {
        diploma = dip;
    }

    public String getDiploma()
    {
        return diploma;
    }

    public void setCredits(String cre)
    {
        credits = Integer.parseInt(cre);
    }

    public int getCredits()
    {
        return credits;
    }

    public void setGender(String g)
    {
        gender = g;
    }

    public String getGender()
    {
        return gender;
    }

    public void setAge(String a)
    {
        age = Integer.parseInt(a);
    }

    public int getAge()
    {
        return age;
    }
    public void setLevel(String lvl)
    {
        level = Double.parseDouble(lvl);
    }

    public double getLevel()
    {
        return level;
    }
    public void setStudentNRIC(String nr)
    {
        studentNRIC = nr;
    }

    public String getStudentNRIC()
    {
        return studentNRIC;
    }

}

/**** Dies ist eine die Account-Superklasse***/

public class Account {

    private String name;
    private String department;
    private String username;
    private String password;
    private String accountID;
    public Account()
    {
    }   
    public Account(String nm,String dep,String user,String pass, String accID) 
    {
        name = nm;
        department = dep;
        username = user;
        password = pass;
        accountID = accID;

    }

    public void setName(String nm)
    {
        name = nm;
    }

    public String getName()
    {
        return name;
    }

    public void setDep(String d)
    {
        department = d;
    }

    public String getDep()
    {
        return department;
    }

    public void setUser(String u)
    {
        username = u;
    }
    public String getUser()
    {
        return username;
    }

    public void setPass(String p)
    {
        password = p;
    }

    public String getPass()
    {
        return password;
    }

    public void setAccID(String a)
    {
        accountID = a;
    }

    public String getAccID()
    {
        return accountID;
    }
}

0 Stimmen

Ein vollständiges Beispiel, das AbstractTableModel erweitert, ist hier zu sehen.

0voto

Verhagen Punkte 3787

Ihr DataStorage ist ähnlich wie das StudentRegistration im Beispielcode verwendet wird.

// TIPP: Es kann praktisch sein, den Studenten in einer geordneten Map zu platzieren
//      (deshalb wird die sortierte Map verwendet).
private SortedMap students = new TreeMap();  

    // FRAGE: Warum nicht den Argumentnamen 'student' verwenden?
    public void addStudentMember(Student aAcc)
    {
        students.put(aAcc.getUser(),aAcc);
    }
    // Aktualisierte Implementierung
    public void addStudent(Student student)
    {
        students.put(student.getAccID(), student);
    }

 // FRAGE: Wäre nicht ein Methodenname 'getNumberOfStudents' besser?
    public int getStudentRows()

Für mich ist es ein wenig unklar, warum Student von Account erbt. Die Kontokennung, ist das eine eindeutige ID im gesamten System? Haben Mitarbeiter (Nutzer) und Studenten (Nutzer) alle diese eindeutige Kennung? Wo / wer erstellt sie? Wenn nicht das System selbst, kann nie garantiert werden, dass sie auch korrekt in Ihr System eingegeben werden. Selbst wenn die Eindeutigkeit innerhalb Ihres Systems überprüft wird, hilft. Aber wer sagt, dass nicht jemand anderes (versehentlich) die eindeutige ID eines anderen verwendet hat? (Wie werden die Studenten- und Mitarbeiterkonten erstellt? Wenn diese IDs tatsächlich eindeutig sind, warum verwenden Sie diese nicht zum Platzieren des Studenten in einer SortedMap? Wenn die Sortierung nicht wichtig ist. Warum nicht einfach eine Liste von Studenten verwenden?

Ist der Name eindeutig (mit dem Sie den Studenten in der Map platzieren)?

Programmieren ist wenig mehr als das Erlernen einer Programmiersprache. Wenn Sie einmal die objektorientierte Sprache Java verstanden haben, ist es gut, einige allgemeine Programmierbücher zu lesen. In Ihrem speziellen Fall würde ich mit Domain Driven Design beginnen. Und dann weitermachen mit Büchern wie diesen Test Driven Development, Refactoring to Patterns und Design Patterns.

0 Stimmen

Das Konto Superklasse enthält gemeinsame Instanzen, wie Name, Alter, Geschlecht, wobei sowohl Studenten als auch Mitarbeiter erstellte Konten erben werden, deshalb habe ich dieses Konto erstellt und Mitarbeiter und Studenten erweitern sie

0 Stimmen

Public StudentTableModel(StudentRegistration register) { super(); this.register = register; } Ich verstehe nicht, warum ich einen Aufruf des Konstruktors meiner DataStorage-Klasse benötigen würde. Der Konstruktor meiner DataStorage-Klasse ist null

0 Stimmen

Mmm, Es gibt keinen Aufruf von new StudentRegistration(...) (aka DataStorage) dort. Es wird nur eine Referenz zu dieser Instanz benötigt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X