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);
}
И назовите это вместо цикла