Java 如何记录编辑JTable单元格的时间

Java 如何记录编辑JTable单元格的时间,java,Java,我正在尝试根据JTable中的值更新JPanel,因此我想知道如何记录JTable被编辑的时间,以便更新我正在使用的JPanel 我尝试使用TableModelListener,但listener中的代码仅在调整帧大小时运行,因此我被卡住了 这是我的TableModelListener代码: tableauTroncon.addTableModelListener(new TableModelListener() { @Override public void tableChan

我正在尝试根据JTable中的值更新JPanel,因此我想知道如何记录JTable被编辑的时间,以便更新我正在使用的JPanel

我尝试使用TableModelListener,但listener中的代码仅在调整帧大小时运行,因此我被卡住了

这是我的TableModelListener代码:

tableauTroncon.addTableModelListener(new TableModelListener() {
    @Override
    public void tableChanged(TableModelEvent e) {
        System.out.println("A cell was edited");
        EtapeUpdater.majEtape(etape, tableauTroncon.getData()); // updates the data used by the JPanel
        affichageEtape = new EtapePanel(etape); //Updates the JPanel
        affichageEtape.repaint(); //Repaints the JPanel
    }
});`
编辑:我指的是用户手动更新单元格。 此外,tableauTroncon是我的自定义TableModel的一个实例 我不知道这是否有帮助,但我的自定义TableModel的代码如下:

public class EtapeTableModel extends AbstractTableModel {
private List<Troncon> data;
private String[] titre; //Title of the columns

public EtapeTableModel(List<Troncon> data, String[] titre){
    this.data = data;
    this.titre = titre;
}

public String getColumnName(int col){
    return this.titre[col];
}

public int getColumnCount(){
    return this.titre.length;
}

public int getRowCount(){
    return this.data.size();
}

public Object getValueAt(int row, int col){
    Troncon troncon = data.get(row);
    switch(col)
    {
        case 0:
            return row;
        case 1:
            return troncon.getLongueur(); 
        case 2:
            return troncon.getDenivele();
        case 3:
            return troncon.isPave();
        case 4:
            return new JButton();
        default:
            throw new IllegalArgumentException();

    }
}

public void setValueAt(Object value, int row, int col){
    switch(col)
    {
        case 1:
            data.get(row).setLongueur( (double) value);
            break;
        case 2:
            data.get(row).setDenivele((double) value);
            break;
        case 3:
            data.get(row).setPave((boolean) value);
            break;
        case 4:
            break;

        default:
            throw new IllegalArgumentException();
    }

    //EtapeUpdater.majEtape(,data); 
}

public boolean isCellEditable(int row, int col)
{
    return true;
}

public Class getColumnClass(int col){
    switch(col)
    {
        case 0: return Integer.class;
        case 1:
        case 2:
            return Double.class;
        case 3: return Boolean.class;
        case 4: return JButton.class;
        default: throw new IllegalArgumentException();

    }

}
这可能会有帮助

myTable.getModel().addTableModelListener(new TableModelListener()
{
 @Override
 public void tableChanged(TableModelEvent e) 
 {
 // access the values of the model and save them to the file here
}
});
看到这个帖子了吗


您应该显示更多代码,并说明表是如何更新的。是否指用户双击单元格并输入新值的手动更新?不管怎样:无论你在affichageEtape中做什么=新的EtapePaneletape//更新了JPanel,这几乎肯定是错误的…我编辑了我的帖子,因为它不清楚。我试图更新我的JPanel,当用户更改单元格的值时,双击并输入一个值至少你必须调用fireTableCellUpdatedrow,column;在setValueAt实现的末尾。否则,将不会通知听众。您的代码可能还有其他问题。。。很可能是这样。。。但我不是在这里做代码审查…非常感谢!它成功了!现在一切都按预期进行。。。你也可以指出。。。我想结束这个问题,但不确定最好的理由是什么。让我们等待roomba来清理这个…谢谢你的回答,但是tableauTroncon是一个TableModel,所以我已经将我的侦听器添加到TableModel中了。问题是编辑单元格不会触发TableModelEvent,我不知道为什么