java - Jtable 与 AbstractTableModel 删除所有行

标签 java jtable abstracttablemodel

我尝试在添加新行之前删除 Jtable 的所有行。但由于某种原因我无法删除一行。

在 ModelDynamiqueObjet 中,我定义了所有覆盖方法,然后添加两个方法,一个用于添加对象,另一个用于删除对象。

我成功添加了多个对象,但是当我尝试删除数组列表的某些对象时,我失败了。 这是我的 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);
    }
} }

如果有人能告诉我我做错了什么。感谢您的帮助

最佳答案

你的循环必须是逆向的,因为你删除了前面的索引并且计数小于“i”,所以最后的索引将不可用。

另外,更简单:

而不是调用每个removeRow(这应该是相反的工作)

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

只需从模型中清除列表,将其添加到 TableModelImplClass

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

并调用它而不是循环

关于java - Jtable 与 AbstractTableModel 删除所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48348756/

相关文章:

java - TextField 不动态更新

Java Nimbus Button.foreground 不工作

java - 将 JButton 添加到使用抽象表模型的 JTable 中

java - 在自定义 JTable 中传递事件

java - Spring ResourceBundleMessageSource 不会从 jar 中加载属性文件,而 ClassPathResource 可以

java - 当我单击按钮时,JTable 永久为单元格着色

java - AbstractTableModel - 不返回 getRowCount()

java - 自定义 TableModel 中的 NullPointerException

Java:JTable自动主键更新

Java - setVisible(true) 对 GUI 没有影响