Avatar billede krestenbanke Nybegynder
28. april 2004 - 16:37 Der er 12 kommentarer og
1 løsning

repaint/opdater JTable

Jeg skal skal indsætte indholdet fra en Vector i en JTable. Problemet er blot at det der bliver indsat ikke bliver vist...?
bruger en defaultTableModel som jeg lægger i en tabel:
(dette sker i Constructoren)

tabelModel =  new DefaultTableModel(tabelIndhold, kolonneNavne) {
                public int getColumnCount() { return 6; }   
      public int getRowCount() { return 20;}               
};

jTable1 = new JTable(tabelModel);
________
senere "opdaterer" jeg tabellen med metoden:


public void opdaterTabel() {
   
Vare denneVare = (Vare)lager.getLagerVector().firstElement();
int vareNr = denneVare.getVareNr();
System.out.println("vareNr " + vareNr);
Vector tempVector = new Vector();
tempVector.add(""+vareNr);
tempVector.add("");
tempVector.add("");
tempVector.add("");
tempVector.add("");
tempVector.add("");
this.tabelIndhold.add(tempVector);
this.tabelModel.setDataVector(this.tabelIndhold, this.kolonneNavne);
lagerGuiPanel.repaint();
jTable1.repaint();
//System.out.println("tempVector " +tempVector.toString());
//System.out.println("lagerVector " + lager.getLagerVector().firstElement().toString());
}

____
repainter både tabellen og det JPanel som den ligger på. Hvad er det der gør at der intet sker i tabellen. Der er kun tomme felter....???

Håber der er een som kan hjælpe!
Avatar billede signori Nybegynder
28. april 2004 - 17:25 #1
hvilken type er tabelIndhold?
Avatar billede signori Nybegynder
28. april 2004 - 17:37 #2
Et skud i tågen. Prøv lige at set noget indhold i de tomme tekststrenge som du adder til tempVector.....eller mellemrum.
Avatar billede signori Nybegynder
28. april 2004 - 17:39 #3
Jeg har så vidt jeg kan se og huske aldrig haft behov for at repaint ved opdatering af en JTable.
Avatar billede krestenbanke Nybegynder
28. april 2004 - 18:48 #4
tabelIndhold er en Vector.
Har prøvet at sætte noget i de tomme tekststrenge, det hjalp heller ikke...
Andre forslag??
Avatar billede trp79 Nybegynder
28. april 2004 - 19:00 #5
Nu er jeg selv meget dårlig til JTable, men der er en god gennemgang af det på www.docjava.dk --> grafisk brugergrænseflade. Det skulle nok kunne inspirere dig lidt :)

det var bare lige det, mvh
Torben
Avatar billede trp79 Nybegynder
28. april 2004 - 19:04 #6
Ellers har vith lavet et komplet eksempel her: http://www.eksperten.dk/spm/337617
Avatar billede _carsten Nybegynder
28. april 2004 - 21:44 #7
Ret:
tabelModel =  new DefaultTableModel(tabelIndhold, kolonneNavne) {
                public int getColumnCount() { return 6; }   
      public int getRowCount() { return 20;}               
};

Til:
tabelModel =  new DefaultTableModel(tabelData, columnNames) {
    public int getColumnCount() { return 6; }
    public int getRowCount() { return tabelData.size();}
    // VISER EN TABEL UDEN RÆKKER, ALTERNATIVT KAN DU GØRE SÅDAN
    // return tabelData.size() == 0 ? 1 : tabelData.size();
    // VISER TABELLEN MED 1 RÆKKE HVIS VECTORS STØRRELSE ER 0

Ret:
Vector tempVector = new Vector();
tempVector.add(""+vareNr);
tempVector.add("");
tempVector.add("");
tempVector.add("");
tempVector.add("");
tempVector.add("");
this.tabelIndhold.add(tempVector);
this.tabelModel.setDataVector(this.tabelIndhold, this.kolonneNavne);
lagerGuiPanel.repaint();
jTable1.repaint();


Til:
            Vector tempVector = new Vector();
            tempVector.add(""+vareNr);
            tempVector.add("456");
            tempVector.add("789");
            tempVector.add("asd");
            tempVector.add("dfg");
            tempVector.add("fgj");
            tabelModel.addRow(tempVector);

Så tilføjer du endnu en række til din tabelmodel som er den der vises i din JTable
Avatar billede _carsten Nybegynder
28. april 2004 - 21:45 #8
Skal selvfølgelig være sådan (havde fat i dit gamle spørgsmål)
tabelModel =  new DefaultTableModel(tabelIndhold, kolonneNavne) {
Avatar billede _carsten Nybegynder
28. april 2004 - 21:46 #9
Hold da helt fest hvor jeg klokker i det

tabelModel =  new DefaultTableModel(tabelIndhold, kolonneNavne) {
    public int getColumnCount() { return 6; }
    public int getRowCount() { return tabelIndhold.size();}
Avatar billede krestenbanke Nybegynder
28. april 2004 - 23:37 #10
ok, så var det fordi jeg ikke "add"-ede til tabelmodellen. Det giver mening. Nu får jeg dog en nullPointer på getRowCount, selvom jeg har brugt:
return tabelData.size() == 0 ? 1 : tabelData.size();
som du skrev...
Kan der være fejl i den??
Avatar billede krestenbanke Nybegynder
28. april 2004 - 23:38 #11
jeg starter nemlig op med en tom Vector, som du er inde på...
Avatar billede _carsten Nybegynder
29. april 2004 - 07:17 #12
Nu kan jeg ike lige finde  ud af hvilken du bruger, tabelData/tabelIndhold

men:  return tabelData.size() == 0 ? 1 : tabelData.size();

eller

return tabelIndhold.size() == 0 ? 1 : tabelIndhold.size();
Avatar billede krestenbanke Nybegynder
29. april 2004 - 13:06 #13
jeg bruger tabelIndhold...
Det virkede ikke, men lavede min egen model af AbstractModel, så jeg selv kan "kontrolere" hvad der returneres osv. Blandt andet bruger jeg ArrayList i stedet for Vector...
Men du skal nok få points'ne alligevel :-)
Tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester