ich habe eine Hauptklsse in der ich eine JTable mit eigenem Modell initialisiere (die JTable bezieht ihre Daten aus einem ArrayList
in der auch ein button zum erweitern der Tabellendaten eingefügt ist:
Code:
...
private ArrayList inhalt;
private JTable adresstabelle = new JTable(new JTableModel());
public HauptKlasse()
{
JScrollPane scroll = new JScrollPane();
scroll.getViewport().add(adresstabelle);
JButton hinzufuegen = new JButton(hinzufügen);
}
{public void actionPerformed(ActionEvent actionEvent)
{
if (actionEvent.getSource().equals(_hinzufuegen))
{inhalt.add //hier wird mittles schleife aus mehreren textfeldern ausgelesen)
}
Die Daten aus ArrayList(inhalt) sind "global" in einer eigenen Klasse abgespeichert (SingletonDesign)
Das Table Model sieht folgendermaßen aus:
Code:
public class JTableModel extends AbstractTableModel
{
final private String TABELLENSPALTEN[] =
{ "A","C" usw...}
public int getRowCount()
{
return inhalt.size()/7;
}
public int getColumnCount()
{
return TABELLENSPALTEN.length;
}
public Object getValueAt(int row, int col)
{ zaehler = inhalt.size() /7;
for (int reihenVar = 0; reihenVar < zaehler; reihenVar++)
{
for (int spaltenVar = 0; spaltenVar < 7; spaltenVar++)
{
if (col == spaltenVar)
{
if (row == reihenVar)
{
try
{
return inhalt.get(7 * reihenVar + spaltenVar);
}
catch (RuntimeException e)
{
return "";
}
}
}
}
}
return "";
}
}
Meine Frage : wie kann ich aus meiner Hauptklasse aus dem ActionListener(eigeneMethode) die Tabelle so neu zeichnen lassen, dass sie genauso dynamisch wie meine ArrayList ist aus der sie aufgebaut ist ???
Ich denke das wird irgendwie mit firetablecellupdate gehen hab das aber noch nicht hinbekommen....
Danke schonmal im Voraus
Gruß Johann (wenn ihr fragen zu meinem Code habt schreibt einfach ich hab hier sehr vereinfacht....)
wie kann ich die Tabelle (aus meiner Hauptklasse) neu zeichnen lassen, hab schon in der API nachgelsen es aber anscheinend nicht richitg verstanden (konntes nicht umsetzen).
Die Tabelle ist dynamisch wird aber nicht als solche nagezeigt (mein sichtfenster zeigt nicht an was in dem ArrayList steht...
Wie du schon gesagt hast, die entsprechenden Fire-Methoden müssen aufgerufen werden, also z.B.:
Code:
public class JTableModel extends AbstractTableModel {
public void lastRowAdded(){
int index = getRowCount()-1;
fireTableRowsInserted( index, index );
}
}
Code:
public void actionPerformed( ActionEvent e ){
arrayList.add( "xyz" );
jtableModel.lastRowAdded();
}
mfg Beni
P.S. Diese doppelte Schlaufe beim "getValue" saugt wohl recht Performance weg, hm?
zu der doppelten schleife: hab noch keine Ahnung wie sich die vermeinden lässt weil ich nicht weiss wie man anders als (if col/row == ...) in die Tabelle eintragen kann...
abgesehen von deiner Lösung kann man die Tabelle auch kurz von visible true auf false auf true setzen nichts sauberes aber so hab ich mir dann grad geholfen
mhm ich bekomm ne Fehlermeldung dass meine Methode nicht static ist weiss aber nicht warum sie das sein sollte ...
kannst du mir vielleicht nochmal helfen ?
Danke