carookee - group communication for you
Home / JavaForum / Swing + AWT
Infos   |   Features   |   Gold-Edition   |   Kundenservice   
java
  Übersicht
  Forum
Beginner
Java allgemein
JDBC
JNI
Networking
Online-Ressourcen
Swing + AWT
XML
Meckerecke
  Mitglieder
LOGIN





· Passwort vergessen
· Kostenlos anmelden
  Information
  Demo
  Features
  Im Vergleich
  Anmeldung
SUCHE
Beiträge, Foren oder Verfasser finden:
  Kundenservice
  Impressum
  Datenschutz
  AGB
Status
5.020 User online
0 User eingeloggt
 

Beiträge
   Antworten     Neuer Beitrag    

Beitrag 326 von 1460 (22%) |<   <   >   >|

Autor Harald Faber
Datum 23.07.03, 10:15
Betreff Re: Hinzufügen von neuen Zeilen in einer JTable zur Laufzeit


    Zitat:
    hallo zusammen,

    wie mache ich es möglich einer jtable zur laufzeit eine neue zeile zu verpassen. also, dass ganze sieht so aus, dass ein datenbestand aus einer oracle-db gelesen wird. muss aber nicht immer der fall sein, heisst, die tabelle kann auch leer sein. nun möchte ich es per button ermöglichen eine neue zeile zu erstellen, die dann "sofort" zusehen ist. der user soll seine eingaben tätigen und dann die daten speichern. wie geht das????
    danke für euer feedback.

    gruß
    mastermind
Also wir haben es zwar etwas allgemeiner implementiert, so dass es für mehrere verschiedene JTables funktioniert, aber das Prinzip ist folgendes, was wir verwenden:

Wir haben ein Interface TableRow implementiert, das die Methode public Object getCellContent(int columnIndex); beinhaltet. (Für eine einzige Tabelle wohl nicht nötig)
Dann eine neue Klasse
MainTableRow implemets TableRow angelegt, die
getCellContent(int columnIndex){} implementiert, z.B.:
public Object getCellContent(int columnIndex)
{
switch ( columnIndex )
{
case 0: return ( new String("1") ); // was immer du wünschst
case 1: return ( new String("123") );
default: return ( "-" );
}
}

So, und in Deinem TableModel konstruierst Du für
public Object getValueAt(int rowIndex, int columnIndex)
{
return ((TableRow)rows.get(rowIndex)).getCellContent(columnIndex);
}

Wobei rows eine ArrayList ist, die sämtliche Tabellenzeilen verwaltet. D.h. auf das gewünschte Ereignis - ein Button-Click in Deinem Fall - reagierst Du mit hinzufügen eines TableRow-Objektes zu rows:

void jbAdd_actionPerformed(ActionEvent e)
{
((DeinTableModel)<Deine JTable>.getModel()).addEmptyTableRow();
}

Also mal eben im TableModel:

public void addEmptyTableRow()
{ // Dein gewünschter Code
MainTableRow row = new MainTableRow();
rows.add( row ); // Hier wird die TableRow hinzugefügt
fireTableDataChanged();
}

Somit kannst Du im Konstruktor von MainTableRow machen, was Du willst. Allerdings darfst Du dabei nicht vergessen, dass bereits vorhandene Daten ebenfalls in dieses Konstrukt hinein müssen. Also wenn Du vorher eine DB-Abfrage durchführst, solltest Du die in der Tabelle anzuzeigenden Daten auch pro Zeile in TableRow "verwandeln" und der ArrayList rows hinzufügen.
Der Vorteil ist, dass man keine 2-dimensionalen Arrays oder irgendwelche Tricks mit HashMaps o.ä. im TableModel einbauen muss, auf die man bei getValueAt(...) zugreifen muss, sondern Zeile für Zeile Zugriff auf die Daten hat.

Ich hoffe, das war einigermaßen verständlich...

Gruß,
Harald


Diskussionsverlauf:
Hinzufügen von neuen Zeilen in einer JTable zur Laufzeit
    Re: Hinzufügen von neuen Zeilen in einer JTable zur Laufzeit

 Auf diesen Beitrag antworten
 Neuen Beitrag verfassen


|<   <   >   >|

                                                                                                                                                                                                                           

Impressum  · Datenschutz  · AGB  · Infos  · Presse
Ein modernes Forum: teamturn.com