【问题标题】:Get Sum of a Specific Column on Editing a Cell in Jtable在 Jtable 中编辑单元格时获取特定列的总和
【发布时间】:2019-05-18 10:06:35
【问题描述】:

我试图在键入/编辑第 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 上自动求和。

【问题讨论】:

  • 如需更好的帮助,请edit 添加minimal reproducible exampleShort, Self Contained, Correct Example。表的硬编码数据。
  • 基本上在第 4 列输入时,我希望它立即在我的 jtextfield 上自动求和。这在哪方面是可能的?
  • 因为无视我的建议而减一。我可以在 edit 上删除它以添加 MCVE。哦,因为我之前忘记了,所以投票结果很接近。

标签: java swing sum jtable listener


【解决方案1】:

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

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

如果您真的想在用户输入编辑器时更新总数,那么您需要在编辑器使用的文本字段中添加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 属性的变化。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这看起来不像是一个答案,请参阅stackoverflow.com/help/how-to-answer“有同样的问题吗?”。你真的尝试过解决方法吗?结果如何?
    • 这很好用,但我不想包含一个按钮,而是让它在键入时自动求和
    猜你喜欢
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多