[Java] JTable wijzigen

Pagina: 1
Acties:

  • Johnny
  • Registratie: December 2001
  • Laatst online: 16:10

Johnny

ondergewaardeerde internetguru

Topicstarter
Ik wil een tabel op het scherm zetten met een overzicht van een bepaald onderwerp in een bepaald jaar.

Er zijn dus een (bijna) oneindig mogelijke tabellen. Per onderwerp hebben ze een verschillende kolomindeling.

Mijn idee was dus om dezelfde tabel steeds te "recyclen", maar ik kan geen manier vinden om alle inhoud van een tabel te vervangen.

Mijn volgende idee was om iedere keer de hele tabel dan maar te "vernietigen" en een nieuwe aan te maken.

Hier even wat pseudo code:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//start tabel:
JTable tabel = new JTable(data, columnNames);

//laten zien op het scherm
this.add(tabel);

//andere tabel laten zien
actionPerformed {

tabel.destroy();
JTable tabel = new JTable(data, columnNames);
this.add(tabel);

}


Maar hoe kan ik dit laten werken? JTable heeft volgens mij geen methode om zichzelf te vernietigen, en aan destroy() heb ik blijkbaar ook niets.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Je moet de oude tabel eerst verwijderen uit de container die je gebruikt met remove(tabel) en daarna maak je een nieuwe en die add je weer.

"Beauty is the ultimate defence against complexity." David Gelernter


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 21:44

Robtimus

me Robtimus no like you

Of gebruik een javax.swing.table.DefaultTableModel, en roep daarvan eerst setRowCount(0) aan (je verwijdert alles), gevolgd door een reeks addRow(...) aanroepen om alles toe te voegen. Werkt hier al tijden perfect, en je kunt gewoon je JTable met TableModel recyclen.

Stukje code, uit een XML viewertje van me (maakt gebruik van JDOM; attributes is een List met Attributes):
Java:
1
2
3
4
5
6
7
8
9
10
11
tableModel = new DefaultTableModel(new String[] {"Name", "Value"}, 0);
table = new JTable(tableModel);

...

tableModel.setRowCount(0);
for (int i = 0; i < attributes.size(); i++)
{
    Attribute att = (Attribute)attributes.get(i);
    tableModel.addRow(new String[] {att.getName(), att.getValue()});
}

[ Voor 46% gewijzigd door Robtimus op 20-03-2004 17:46 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Johnny
  • Registratie: December 2001
  • Laatst online: 16:10

Johnny

ondergewaardeerde internetguru

Topicstarter
IceManX schreef op 20 maart 2004 @ 17:43:
Of gebruik een javax.swing.table.DefaultTableModel, en roep daarvan eerst setRowCount(0) aan (je verwijdert alles), gevolgd door een reeks addRow(...) aanroepen om alles toe te voegen. Werkt hier al tijden perfect, en je kunt gewoon je JTable met TableModel recyclen.
Dat zou een gedeeltelijke oplosisng zijn, maar dan is het toch nog zo dat de table-headers/het aantal kolommen blijft bestaan, en deze veranderen ook per onderwerp, dus dan zou ik voor ieder onderwerp een aparte tabel moeten aanmaken, het is te doen, maar met een enkele tabel zou mooier zijn.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 21:44

Robtimus

me Robtimus no like you

Moet ik nog zeggen dat DefaultTableModel ook setColumnCount(int) en meerdere addColumn(...) methods heeft? ;)

More than meets the eye
There is no I in TEAM... but there is ME
system specs