Ich habe ein Problem mit meinem Jtable/TableModel, egal wie sehr ich versuche, kann ich nicht reparieren. Ich arbeite an einem Adressbuch-Programm, ohne ein Datenbank-Programm, da unser Professor möchte, dass wir alles von Hand lernen, also was ich habe, ist eine .csv-Datei, die ich zum Lesen/Schreiben von Kontakten verwenden. Ich lese die Kontakte in der Datei, lege sie auf eine Liste, verwende diese Liste, um ein TableModel um sie herum zu bilden, und mache dann eine Jtable mit besagtem TableModel. mein problem taucht auf, wenn ich einen neuen kontakt in die datei schreibe, wird sich die jtable nicht mit der neuen info aktualisieren, außer wenn ich das programm schließe und es wieder starte. Wie würde ich in der Lage sein, die Tabelle mit den neuen Informationen zu aktualisieren?Wie man eine jtable aktualisiert, wenn ich ein benutzerdefiniertes TableModel mit einer Liste von aus einer Datei gelesenen Elementen verwende
heres, wo ich zuerst das jtable und das Tabellenmodell mache, wird nicht ganze Methode seit seiner unzusammenhängenden schreiben.
List<Contatcs> listContacts = createListContacts(username);
tableModel = new TableModel(listContacts);
//create table, sorter and set single selection model
jTable = new JTable(tableModel);
final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tableModel);
JTableHeader jtHeader = jTable.getTableHeader();
hier, wo ich meine Kontaktliste erstellen
public static List<Contatcs> createListContacts(String username) throws FileNotFoundException{
String file = "CustomersAddressBooks\\" + username + ".csv";
Scanner fileReader = new Scanner(new File(file));
List<Contatcs> retVal = new ArrayList();
while (fileReader.hasNextLine()){
String line = fileReader.nextLine();
line = line.replaceAll("\r||\n","");
String[] var = line.split(",");
if(!line.equals("") && !var[0].equals("FirstName") && !var[1].equals("LastName")){
retVal.add(new Contatcs(var[0],var[1],var[2],var[3],var[4],var[5],var[6],var[7],var[8]));
}
}
fileReader.close();
return retVal;
}
und dies ist meine Tablemodel Klasse
public class TableModel extends AbstractTableModel {
private static final int COLUMN_FIRSTNAME = 0;
private static final int COLUMN_LASTNAME = 1;
private static final int COLUMN_PHONENUMBER = 2;
private static final int COLUMN_CITY = 3;
private String[] columnNames = {"First Name", "Last Name", "Phone Number", "City"};
private List<Contatcs> listContacts;
public TableModel(List<Contatcs> listContacts){
this.listContacts = listContacts;
int indexCount = 1;
for(Contatcs contact : listContacts){
contact.setIndex(indexCount++);
}
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public int getRowCount() {
return listContacts.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Contatcs contacts = listContacts.get(rowIndex);
Object retVal = null;
switch(columnIndex){
case COLUMN_FIRSTNAME: retVal = contacts.getFirstName(); break;
case COLUMN_LASTNAME: retVal = contacts.getLastName(); break;
case COLUMN_PHONENUMBER: retVal = contacts.getPhoneNumber(); break;
case COLUMN_CITY: retVal = contacts.getCity(); break;
default: throw new IllegalArgumentException("Invalid column index.");
}
return retVal;
}
@Override
public String getColumnName(int columnIndex){
return columnNames[columnIndex];
}
@Override
public Class<?> getColumnClass(int columnIndex){
if(listContacts.isEmpty()) return Object.class;
else return getValueAt(0,columnIndex).getClass();
}
}
1) Um eine bessere Hilfe zu erhalten, sollten Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/) veröffentlichen. 2) Kleingeschriebene Wörter sind schwer zu lesen, wie wenn man jemandem zuhört, der murmelt. Bitte verwenden Sie einen Großbuchstaben am Anfang von Sätzen, für das Wort I, und Eigennamen wie 'ArrayList' oder Oracle. –
Verwerten Sie nicht den Schnittstellennamen 'TableModel' für eine Unterklasse. – trashgod