获取有关在Jtable中编辑单元格的特定列的总和

时间:2019-05-18 10:06:36

标签: java swing sum jtable listener

我试图在键入/编辑第4列的值时获得第4列的总和。立即更改数字,即当我在第4列的任何行上键入时,它应该更改我在jTextField上设置的总和。

我尝试了TableModelListener和ListSelectionListener,但是由于我必须单击它的行以获取摘要,因此它无法有效工作。

jTable1.getModel().addTableModelListener(new TableModelListener(){
public void tableChanged(TableModelEvent evt){
    float sum = 0;
    int[] rows = jTable1.getSelectedRows();
    for(int i=0;i<jTable1.getRowCount();i++){
    try{
    sum = sum + 
Float.parseFloat(jTable1.getValueAt(rows[i],4).toString());
    }
    catch(Exception e){
    continue;
    }
    }
    jTextField15.setText(Float.toString(sum));
    getsummaries();
    }
});

我立即更改第4列的值,我希望它是jTextField15上的autosum。

2 个答案:

答案 0 :(得分:0)

我还没有解决的办法。在JTable上键入时,很难记录总和。一种解决方法是创建一个按钮,并在jTextField上计算总数。

答案 1 :(得分:0)

  

它没有有效地工作,因为我必须单击它的行才能获得摘要。

仅当单元格失去焦点时才更新模型,因为那是您输入的值被保存到模型中时。这是因为您可以开始输入数字,然后使用“退出”键取消编辑。

如果您确实要在用户输入编辑器时更新总数,那么您将需要在编辑器使用的文本字段中添加DocumentListener,而不是使用TableModelListener:

DefaultCellEditor editor = (DefaultCellEditor)table.getDefaultEditor(Integer.class);
JTextField textField = (JTextField)editor.getComponent();
textField.getDocument().addDocumentListener(...);

有关更多信息和示例,请参见Listening For Changes on a Document的Swing教程中的部分。

当然,如果这样做,您将需要在取消编辑器时进行处理。因此,您还需要向PropertyChangeListener添加JTable并监听tableCellEditor属性的变化。