JTabel wird nicht dargestellt bzw an anderer stelle doppelt...

docere

Grünschnabel
Hi zusammen,

also erstmal kurz n Lob, ich sitz gerade mit nem Kollegen am Projekt für die Uni und das Forum hat uns schon bei nem batzen Probleme geholfen, allerdings haben wir jetzt ein Problem zu dem wir nichts gefunden haben, ich hoffe mal jemand hat ne Idee/Lösung parat:

Wir laden Fächerdaten für einen Professor aus einer Datenbank. Für jedes Fach wird jetzt in einer JTabbedPane ein neuer Tab (JScrollPane) mit der Bezeichnung des Faches als Titel erzeugt. Das funktioniert so weit auch super, allerdings soll in der ScrollPane eine Tabelle mit den Daten aus der Datenbank stehen in denen z.B. Name, Vorname, Anmeldezeitpunkt usw der Studenten für das entsprechende Fach stehen. Das Ding und eigentlich Problem ist jetzt, dass er auf der 1. erzeugten ScrollPane keine Tabelle zeichnet, dafür die Daten die in diese Tabelle gehören in der Tabelle auf dem 2. erzeugten Tab zuerst anzeigt und dann die Daten die in diese Tabelle gehören.. ich hoffe mal ich hab mich einigermaßen verständlich ausgedrückt...

Hier ist mal der Code, der die Tabs mit den Tabellen erzeugt und die Tabellen mit Daten füllt:

Code:
     for(int i = 0; i < myStudenten.length; i++)
      {
          if(myStudenten[i].getBenutzerID() == 666)
          {

              javax.swing.JScrollPane neueScrollPane = new javax.swing.JScrollPane();
              jTabbedPane1.add(myStudenten[i].getBezeichnung(), neueScrollPane);
              neueScrollPane.getViewport().add(StudentenTabelle);

        
              Object[] ZeileDaten = new Object[3];                         
              ZeileDaten[0] = myStudenten[i].getBezeichnung();
              ZeileDaten[1] = myStudenten[i].getStdAnz();
              ZeileDaten[2] = myStudenten[i].getSemester();

              modelUebersicht.insertRow(modelUebersicht.getRowCount(), ZeileDaten);
              AnzahlFaecher++;
              
              for(int k = 0; k < myStudenten.length; k++)
              {
                  if(myStudenten[k].getBezeichnung().equals(myStudenten[i].getBezeichnung()) && myStudenten[k].getBenutzerID() != 666)
                  {
                   Object[] ZeileDaten2 = new Object[5];
                   
                   Benutzer StudentenDaten = Datenbank.getBenutzerobjekt(myStudenten[k].getBenutzerID());
                   
                   ZeileDaten2[0] = StudentenDaten.getBenutzerID();
                   ZeileDaten2[1] = StudentenDaten.getName();
                   ZeileDaten2[2] = StudentenDaten.getVorname();
                   ZeileDaten2[3] = myStudenten[k].getDatum();
                   ZeileDaten2[4] = myStudenten[k].getNote(); 
                   
                   modelStudenten.insertRow(modelStudenten.getRowCount(), ZeileDaten2);
                   AnzahlAnmeldungen++;
                  }   
              }
         
          }

Vielen Dank schonmal & Grüße,

Pat & Phil
 
moin!
Vielleicht bin ich ja gerade blind, aber wo ist bei dem Aufruf
Code:
neueScrollPane.getViewport().add(StudentenTabelle);
die Studententabelle? Ich denke mal, dass da der Fehler zu finden ist, dass du einfach nicht die richtige Tabelle einfügst, bzw du nur eine erstellt hast?
Wenn du für jedes ScrollPanel auch eine neue Tabelle mit eigenem Model erzeugst, sollte es eigentlich klappen


*grüssle*
MeinerEiner
 
Alter Schwede!
Vielen dank für die fixe Antwort MeinerEiner! Da sitzt man Stunden vor dem Code und versteht es einfach nicht :).

Das mit den Tabellen erstellen klappt jetzt so wie es gedacht war, der Code ist jetzt

Code:
      for(int i = 0; i < myStudenten.length; i++)
      {
          
          if(myStudenten[i].getBenutzerID() == 666)
          {
              javax.swing.JScrollPane neueScrollPane = new javax.swing.JScrollPane();
              jTabbedPane1.add(myStudenten[i].getBezeichnung(), neueScrollPane);
               
               javax.swing.JTable StudentenTabelle = new javax.swing.JTable();
                 StudentenTabelle.removeAll();
               StudentenTabelle.setModel(modelStudenten);
               neueScrollPane.getViewport().add(StudentenTabelle);
        
              Object[] ZeileDaten = new Object[3];                          // Fächerübersicht, daten in die Tabelle

              ZeileDaten[0] = myStudenten[i].getBezeichnung();
              ZeileDaten[1] = myStudenten[i].getStdAnz();
              ZeileDaten[2] = myStudenten[i].getSemester();

              modelUebersicht.insertRow(modelUebersicht.getRowCount(), ZeileDaten);
              AnzahlFaecher++;
              
              for(int k = 0; k < myStudenten.length; k++)
              {
                  if(myStudenten[k].getBezeichnung().equals(myStudenten[i].getBezeichnung()) && myStudenten[k].getBenutzerID() != 666)
                  {
                   Object[] ZeileDaten2 = new Object[5];
                   
                   Benutzer StudentenDaten = Datenbank.getBenutzerobjekt(myStudenten[k].getBenutzerID());
                   
                   ZeileDaten2[0] = StudentenDaten.getBenutzerID();
                   ZeileDaten2[1] = StudentenDaten.getName();
                   ZeileDaten2[2] = StudentenDaten.getVorname();
                   ZeileDaten2[3] = myStudenten[k].getDatum();
                   ZeileDaten2[4] = myStudenten[k].getNote(); 
                   
                   modelStudenten.insertRow(modelStudenten.getRowCount(), ZeileDaten2);
                   AnzahlAnmeldungen++;
                  }   
              }
         
          }           
      }


Allerdings haben wir jetzt das Problem, dass er alle Daten in beiden Tabellen anzeigt. Ich vermute mal das es evtl. mit dem TableModel zusammen hängt? Wenn ich das TabelModel auch jedesmal in der for-Schleife erzeugen lass, dann haut er mit einfach alle Spalten doppelt in alle Tabellen....:confused:

Falls jemand eine Idee hat, nur raus damit!

Danke im Voraus,
Pat
 
:-) alles klar, aber bei der Hitze muss einem das Gehirn ja schmelzen *g.

Also ich hatte das TabelModel global erzeugt und durch die addColumn Befehle natürlich nur die Spalten nochmal zusätzlich hinzugefügt. Des Problems Lösung war natürlich den TabelModel auch in der for-Schleife jedesmal neu erzeugen zu lassen, dann sind natürlich die alten Daten auch gelösch.... Vielen Dank


Nochmals der Code:
Code:
      for(int i = 0; i < myStudenten.length; i++)
      {
          
          if(myStudenten[i].getBenutzerID() == 666)
          {

              javax.swing.JScrollPane neueScrollPane = new javax.swing.JScrollPane();
              jTabbedPane1.add(myStudenten[i].getBezeichnung(), neueScrollPane);
              DefaultTableModel modelStudenten = new DefaultTableModel();         
              modelStudenten.addColumn("Matrikelnummer");                                  // Die Tabelle mit den  
              modelStudenten.addColumn("Name");                                            //Studentendaten wird   
              modelStudenten.addColumn("Vorname");                                        // erstellt   
              modelStudenten.addColumn("Anmeldedatum");
              modelStudenten.addColumn("Note");

               javax.swing.JTable StudentenTabelle = new javax.swing.JTable();
               StudentenTabelle.setModel(modelStudenten);
               neueScrollPane.getViewport().add(StudentenTabelle);

        
              Object[] ZeileDaten = new Object[3];                          // Fächerübersicht, daten in die Tabelle

              ZeileDaten[0] = myStudenten[i].getBezeichnung();
              ZeileDaten[1] = myStudenten[i].getStdAnz();
              ZeileDaten[2] = myStudenten[i].getSemester();

              modelUebersicht.insertRow(modelUebersicht.getRowCount(), ZeileDaten);
              AnzahlFaecher++;
              
              for(int k = 0; k < myStudenten.length; k++)
              {
                  if(myStudenten[k].getBezeichnung().equals(myStudenten[i].getBezeichnung()) && myStudenten[k].getBenutzerID() != 666)
                  {
                   Object[] ZeileDaten2 = new Object[5];
                   
                   Benutzer StudentenDaten = Datenbank.getBenutzerobjekt(myStudenten[k].getBenutzerID());
                   
                   ZeileDaten2[0] = StudentenDaten.getBenutzerID();
                   ZeileDaten2[1] = StudentenDaten.getName();
                   ZeileDaten2[2] = StudentenDaten.getVorname();
                   ZeileDaten2[3] = myStudenten[k].getDatum();
                   ZeileDaten2[4] = myStudenten[k].getNote(); 
                   
                   modelStudenten.insertRow(modelStudenten.getRowCount(), ZeileDaten2);
                   AnzahlAnmeldungen++;
                  }   
              }
         
          }
 
Moin!
Da ja nun alles klappt wie gewünscht und du dazu keine weiteren Fragen mehr hast(?) markiere den Thread doch bitte als erledigt!

*grüssle*
MeinerEiner
 
Zurück