У меня проблема с моей Jtable/TableModel, что независимо от того, насколько я пытаюсь, я не могу исправить ошибку. я работаю над программой адресной книги, без программы базы данных, так как наш профессор хочет, чтобы мы все узнали вручную, так что у меня есть. CSV-файл, который я использую для чтения/записи контактов. я читаю контакты в файле, помещаю их в список, использую этот список, чтобы сформировать вокруг него TableModel, а затем создаю Jtable с указанной TableModel. моя проблема возникает, когда, если я напишу новый контакт в файле, jtable не обновит себя с новой информацией, если я не закрою программу и не запустил ее снова. как я смогу сделать обновление таблицы самой новой информацией?Как обновить jtable при использовании настраиваемой TableModel со списком элементов, считанных из файла
heres, где я сначала создаю таблицу jtable и table, не ставьте весь метод с момента его несвязанного.
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();
вот где я создаю мой список контактов
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;
}
и это мой TableModel класс
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) Для лучшей помощи в ближайшее время отправьте сообщение [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). 2) Слова, напечатанные во всем нижнем регистре, трудно читать, например, пытаться выслушать кого-то, кто бормочет. Пожалуйста, используйте письмо в верхнем регистре в начале предложений, для слова I и собственные имена, такие как 'ArrayList' или Oracle. –
Не перерабатывайте имя интерфейса 'TableModel' для подкласса. – trashgod