07. juni 2004 - 13:27Der er
14 kommentarer og 1 løsning
Opdatering af JTabel (tablemodel)virker ikke i alle kolonner
Hejsa Jeg har en JTabel, hvortil der er knyttet en tablemodel. Mit problem er ret underlig syntes jeg, da den godt vil opdaterer i nogle kolonner men ikke i en andre!:
tableModel.setValueAt(new Boolean(false), i, 9);// Opdatering sker tableModel.setValueAt(new Double(afstand),i,3);//Opdatering sker Double oPris = (Double)tableModel.getValueAt(i,7);//Opdatering sker ikke! double kmPris = oPris.doubleValue(); double pris = afstand*kmPris; tableModel.setValueAt(new Double((pris)),i,7);
System.out.println("prisVariabel "+pris+"\nPrisTabel " +tableModel.getValueAt(i,7));//PrisTabel forbliver altså ved den gamle værdi, og opdateres ikke til den nye.
Håber, der er nogle, der har nogle ideer til, hvordan problemet kan løses.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
AbstractTableModel har blot en "tom" implementation af setValueAt: fra api'en: "This empty implementation is provided so users don't have to implement this method if their data model is not editable."
Så hvis jeg ik husker helt forkert er det smart at lave et fireTableChanged kald efter ændringer i modellen..
Hej labanos Beklager den lange svartid. Ja jeg extender AbstractTableModel. Men hvordan laver jeg en foreTableChanged? Den skal have en TableModelEvent som parameter. Det er jeg ikke lige med på hvad er. Altså jeg skal kalde tableModel.fireTableChanged(TableModelEvent), men jeg er ikke lige med på hvad parameteren skal være. Det er iøvrigt ikke en metode jeg har implementeret i min TableMode, som du kan se i nedenstående. Bør den ikke være der, eller?
Ja, den(fireTableDataChanged) har jeg nemlig også prøvet, men det virkede ikke. Du har ikke yderligere ideer. Det er super sort, at den godt vil opdaterer en celle men ikke en anden :(
kan ikke huske om det er nødvendigt, det er meget lang tid siden jeg har brugt en table, men har du i din table kaldt: model.addTableModelListener(this) //altså model er din TableModelRouteResult, this din jtable..
Mere for overskuelighedens skyld ville jeg rette setValue() til
public void setValueAt(Object value, int row, int column) { TableElementRouteResult element = (TableElementRouteResult)data.get(row);
switch( column ) { case 0: element.setFirmaFra((String)value); break; case 1: element.setFirmaTil((String)value); break; case 2: element.setStopNr((Integer)value); break; case 3: element.setAfstand((Double)value); break; case 4: element.setKilde((String)value); break; case 5: element.setSamletAfstand((Double)value); break; case 6: element.setKmPris((Double)value); break; case 7: element.setPris((Double)value); break; case 8: element.setSamletPris((Double)value); break; case 9: element.setOpdaterAfstand((Boolean)value); break;
} fireTableCellUpdated(row, column); }
Tror du skal lede efter den fejl et andet sted, umiddelbart kan jeg ikke se nogen fejl i din kode, men jeg kigger på det igen senere på aftenen.
Hej Carsten. Jeg har nu implementeret din noget mere overskuelige metode. Hvad angår min problem, så er det altså stadigvæk super underligt. Hvis jeg fx laver disse kald: tableModel.setValueAt(new Double("99.99"),i,3); tableModel.setValueAt(new Double("99.99"),i,6); tableModel.setValueAt(new Double("99.99"),i,7);
så bliver tabellen opdateret ved de to første kald, men den sidste opdatering bliver ikke gennemført, og der kommer heller ingen exception.
Endelig!!! jeg tror fejlen er fundet, og at du havde ret carsten... fejlen liggr vist et andet sted i min kode. Jeg tjekker lige og melder tilbage med det samme...
Jeg havde en tåbelig fejl i en af mine set-metoder i TableElementRouteResult klassen. Hvis du smider et svar carsten, så er der point for du havde jo ret igen:)
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.