我尝试在添加新行之前删除Jtable的所有行。但由于某种原因,我无法删除一行。
在ModelDynamiqueObjet中,我定义了所有覆盖方法,然后添加了两个方法,一个用于添加对象,另一个用于删除对象。
我成功添加了几个对象,但是当我尝试删除arraylist的某个对象时,我失败了。 这是我的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);
}
} }
如果有人能告诉我我做错了什么。谢谢你的帮助
答案 0 :(得分:1)
您的循环必须是反向的,因为最后的索引将不可用,因为您删除了以前的索引并且计数小于'i'。
另外,更容易:
而不是调用每个removeRow(应该反向工作)
TravelerName:[[["Jonathan (Jonny)", "Doe", "Lewis", ""], ["Mary", "Doe", "L", ""] ]]
只需清除模型中的列表,将其添加到TableModelImplClass
即可for (int i = model.getRowCount() - 1; i >= 0; i--)
然后调用它而不是循环