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
User oder E-Mail
Passwort
·
Passwort vergessen
·
Kostenlos anmelden
Information
Demo
Features
Im Vergleich
Anmeldung
SUCHE
Beiträge, Foren oder Verfasser finden:
Kundenservice
Impressum
Datenschutz
AGB
Status
4.739 User online
1 User eingeloggt
Beiträge
Beginner
Java allgemein
JDBC
JNI
Networking
Online-Ressourcen
Swing + AWT
XML
Meckerecke
Antworten
Neuer Beitrag
Gesamtdarstellung
Detaildarstellung
Einzeldarstellung
Threaddarstellung
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