Jtable с AbstractTableModel Удалить все строки

Я пытаюсь удалить всю строку Jtable, прежде чем добавить новую строку. Но по какой-то причине я не могу удалить строку.

В ModelDynamiqueObjet я определяю все методы переопределения, а затем добавляю два метода: один для добавления объекта, а другой для удаления объекта.

Мне удалось добавить объект serverals, но когда я пытаюсь удалить какой-либо объект из массива, мне это не удалось. Это мой класс с AbstractModel:

public class ModeleDynamiqueObjet extends AbstractTableModel {
private ArrayList<Meteo> meteos ;
private String[] entetes = {"Date", "Temps", "Temperature", "Vent", "Humidité", "Nuage"};


public ModeleDynamiqueObjet() {
    super();
    meteos = new ArrayList<Meteo>();
}

@override methods....

public void addRow(Meteo meteo) {
    meteos.add(meteo);
    fireTableRowsInserted(meteos.size() -1, meteos.size() -1);
}

public void removeRow(int index){
    meteos.remove(index);
    fireTableRowsDeleted(index,index);

}

}

Это мой взгляд:

public class Fenetre extends JFrame implements Observer, ActionListener {
private JTextField adresseField;
private ModeleDynamiqueObjet model;
private JTable tableau;
private JScrollPane scrollPane;

private Controller controller = null;

public Fenetre(Controller controller) {
    super("Ma météo");
    this.controller = controller;

    GraphicsEnvironment.getLocalGraphicsEnvironment();
    this.setSize(800,800);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLayout(new BorderLayout());
    model = new ModeleDynamiqueObjet();
    tableau = new JTable(model);
    scrollPane = new JScrollPane(tableau);
    getContentPane().add(new JScrollPane(scrollPane), BorderLayout.CENTER);
    this.setVisible(true);
}

@Override
public void update(Observable o, Object arg) {

    if(o instanceof MeteoAPI ){
        MeteoAPI meteoAPI = (MeteoAPI) o;
        ArrayList<Meteo> meteos = new ArrayList<Meteo>(meteoAPI.getMeteos());

        for(int i =0 ; i < model.getRowCount(); i++){
            model.removeRow(i);
        }

        for (Meteo meteo : meteos) {
            model.addRow(meteo);
        }

         this.setVisible(true);
    }
} }

Если кто-то может сказать мне, что я делаю не так. Спасибо за вашу помощь

1 ответ

Ваш цикл должен быть противоположным, потому что последние индексы не будут доступны, потому что вы удалили предыдущие, и число меньше, чем 'i'.

Также проще:

Вместо того, чтобы вызывать каждый removeRow (это должно работать против часовой стрелки)

for (int i = model.getRowCount() - 1; i >= 0; i--)

Просто очистите список от модели, добавьте его в TableModelImplClass

public void removeAll(){
    int size = meteos.size();
    meteos.clear();
    fireTableRowsDeleted(0, size);
}

И назовите это вместо цикла

Другие вопросы по тегам