【问题标题】:Jtable with AbstractTableModel Remove all Row带有 AbstractTableModel 的 Jtable 删除所有行
【发布时间】:2018-01-19 20:08:39
【问题描述】:

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

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

我成功添加了 serverals 对象,但是当我尝试删除 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);
    }
} }

如果有人可以告诉我我做错了什么。谢谢你的帮助

【问题讨论】:

  • 你的循环一定是反的,检查答案

标签: java jtable abstracttablemodel


【解决方案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);
}

并调用它而不是循环

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 2011-09-08
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 2012-12-04
    相关资源
    最近更新 更多