PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Von ArrayList lesen und in eine JTable schreiben



bozkurt
03-03-2006, 10:31
Hallo,

ich habe eine Problem und ich hoffe dass ihr mir da weiterhelfen könnt...

ich habe eine ArrayList Person und ich habe eine Tabelle und ich will von der

ArrayList Person die Daten in JTable rein tun...

wie kann ich das machen...

vielen dank im voraus...

Caveman
03-03-2006, 12:23
Du brauchst erstmal ein Datenmodel, das von AbstractTableModel abgeleitet ist. Dazu erzeugst Du dir noch einen Listener, der dir sagt wenn die Tabelle geändert wurde und erzeugst dann eine JTable mit diesem Datenmodel.

Beim Datenmodel musst Du dann Methoden wie z.B. getValueAt() so überschreiben, dass der entsprechende Wert aus dem Array zurückgegeben wird.

bozkurt
03-03-2006, 20:21
Hallo,

danke für deine schnelle Antwort...

ich bin neu bei programmieren :( und kannst du bitte einbissle detalliert erklären

mit dem Datenmodell...mit einem kleinen Beispiel vielliecht...

vielen dank

Caveman
04-03-2006, 08:47
Ok, ich hab hier mal einen Teil aus einem Programm, das ich mal geschrieben habe:


dataModel = new AbstractTableModel() // anonyme Klasse
{ // dataModel ist von der Klasse AbstractTableModel
public int getColumnCount()
{
if(AdressenListe.isEmpty() == true) // AdressenListe ist ein 2D-Vector
return 0;
else
{
Vector tmp = (Vector)AdressenListe.firstElement();
return tmp.size();
}
}
public int getRowCount()
{
if(AdressenListe.isEmpty() == true)
return 0;
else
return AdressenListe.size();
}
public String getColumnName(int column)
{
if(AdressenListe.isEmpty() == true)
return null;
else
switch (column)
{
case 0 : return "ID";
case 1 : return "Name";
case 2 : return "Beruf";
default: return ""+column;
}
}
public Object getValueAt(int row, int column)
{
if (AdressenListe.isEmpty() == true)
return null;

Vector tmp = (Vector)AdressenListe.elementAt(row);
return tmp.elementAt(column);
}
public void setValueAt(Object aValue, int row, int column)
{
Vector tmp = new Vector(); //leerer Vector
tmp.add(getRowCount()+1+"");
tmp.add("");
tmp.add("");

if (column == -1) // Zeile löschen
{
AdressenListe.remove(row);

while(++row <= getRowCount())
{
tmp = (Vector)AdressenListe.elementAt(row-1);
tmp.setElementAt(row+"",0);
}
}
else if (row > getRowCount()) // Zeile anhängen
{
AdressenListe.addElement(tmp);
}
else if (row < getRowCount() && row != -1)
{
if (column != 0) // Zeile ändern
{
tmp.clear();
tmp = (Vector)AdressenListe.elementAt(row);
tmp.setElementAt(aValue,column);
}
else // Zeile hinzufügen
{
tmp.setElementAt(row+1+"",0);
AdressenListe.add(row,tmp);

while(++row < getRowCount())
{
tmp = (Vector)AdressenListe.elementAt(row);
tmp.setElementAt(row+1+"",0);
}
}
}
}
public boolean isCellEditable(int row,int column)
{
return column != 0;
}
};

dataModel.addTableModelListener(new TableModelListener()
{
public void tableChanged(TableModelEvent e)
{
speichern.setEnabled(true);
}
});

txtTable = new JTable(dataModel); // Datenmodel in Tabelle einfuegen
pane = new JScrollPane(txtTable); // Tabelle in JPanel einfuegen

Es werden hier drei Spalten beschrieben, wobei die 2. und 3. editierbar sind. Über ein Menü (nicht beschrieben) können Zeilen hinzugefügt bzw. entfernt werden.
Um Änderungen zu aktualisieren muss in einem ActionListener noch folgende Zeile stehen:


dataModel.fireTableDataChanged();

Das sollte Dir ein Stück weiter helfen.
Ansonsten habe ich noch zwei sehr nützliche Links:
http://www.galileocomputing.de/openbook/javainsel5/
http://www.javabuch.de/

bozkurt
05-03-2006, 10:47
vielen dank ... :)