JTable 错误的列总和值

Posted

技术标签:

【中文标题】JTable 错误的列总和值【英文标题】:JTable erroneous column summation values 【发布时间】:2015-09-29 15:47:31 【问题描述】:

场景 : JTable 包含以下数据,我试图在下图中描述我想要做的事情:-

所以,我想我可以在这里解释我想要实现的目标。

面临的问题 当然,不显示准确的结果(总和)。我使用的代码是:

public void docTotal_Income()
   try

       int totC=8,xC=3,lC=4,eC=5, sC=6; // totC is the last column, xC-3rd, lC-4th and so on...


       for(int i=0;i<(easypath.doctorBusiness_table.getRowCount());i++) // "easypath.doctorBusiness_table" is the table name
           sumTot += Double.parseDouble(easypath.doctorBusiness_table.getModel().getValueAt(i, totC).toString());
           sumTotx += Double.parseDouble(easypath.doctorBusiness_table.getModel().getValueAt(i, xC).toString());
           sumTotl += Double.parseDouble(easypath.doctorBusiness_table.getModel().getValueAt(i, lC).toString());
           sumTote += Double.parseDouble(easypath.doctorBusiness_table.getModel().getValueAt(i, eC).toString());
           sumTots += Double.parseDouble(easypath.doctorBusiness_table.getModel().getValueAt(i, sC).toString());
       
       easypath.totalEarnt_docBus_tf.setText(String.valueOf(sumTot));
       easypath.xTotIncome_tf.setText(String.valueOf(sumTotx));
       easypath.lTotIncome_tf.setText(String.valueOf(sumTotl));
       easypath.eTotIncome_tf.setText(String.valueOf(sumTote));
       easypath.sTotIncome_tf.setText(String.valueOf(sumTots));

       sumTot = 0;   // public static    
       sumTotx = 0;  // values globally
       sumTotl = 0;  // declared
       sumTote = 0;  // and
       sumTots = 0;  // initialised 0 

       
       catch(Exception ex)
           ex.printStackTrace();
           JOptionPane.showMessageDialog(null, "Error in totalling income");
       
   

我在用 Document Listener 精炼 JTable 之后调用方法 docTotal_Income()工作正常)并最终触发eventListener 上的 JButton

private void jButton6ActionPerformed(java.awt.event.ActionEvent evt)                                          
    new doctor().docTotal_Income(); // doctor is the class

在所有这些之后,我得到了不规则的总和。我猜我在逻辑的某个地方出了问题,但我还有什么遗漏的吗?

我很乐意对此提出任何建议。感谢您的宝贵时间

【问题讨论】:

什么是“不规则求和”?你的总数减少了 0.01 吗?减 1,000,000?总数是NaN?无穷大? 不规则并不意味着尺寸或任何错误。我试图解释它给出了错误的求和,5+5 = 20 等等....我猜这是我的 逻辑错误,但我无法指出,所以放整个场景按此顺序 将数字放入 XxxTableModel,覆盖模型定义中的 getColumnClass 【参考方案1】:
new doctor().docTotal_Income(); // doctor is the class

首先,类名应以大写字符开头。 “医生()”应该是“医生()”。

你为什么要创建一个新的 Doctor()?

如果您尝试过滤 TableModel 中的数据,那么您需要从表中获取数据,而不是 TableModel。

所以你的代码应该是这样的:

JTable table = easypath.doctorBusiness_table;

for(int i=0; I < table.getRowCount(); i++)

       sumTot += Double.parseDouble(table.getValueAt(i, totC).toString());
       sumTotx += Double.parseDouble(table.getValueAt(i, xC).toString());
       sumTotl += Double.parseDouble(table.getValueAt(i, lC).toString());
       sumTote += Double.parseDouble(table.getValueAt(i, eC).toString());
       sumTots += Double.parseDouble(table.getValueAt(i, sC).toString());

【讨论】:

这很有魅力,有错误getModel(),谢谢你提到的其他事情,从长远来看,一定会记住的。 对于 SO 的初学者和像你这样的人 @camickr,学习是如此容易 还有一件事,我正在创建new doctor()....,因为这是一个不同的类easypath,我正在调用,我是在做正确的事情还是应该改变一些事情? 我不了解您的设计或您想要做什么。但是,是的,我怀疑单击按钮时没有理由创建新类。如果您正在过滤表的结果,那么您让表过滤行,则无需创建新的 TableModel。阅读关于“如何使用表格”的 Swing 教程以获取过滤示例。 docTotal_income() 属于不同的类,因为有许多模块,我为不同的目的创建了不同的类。因此,为了调用该方法,我为docTotal_income() 创建了一个实例。我知道我还不是专业人士,但是您能指导一下开发多线程或重型应用程序的最佳实践和规范吗?我将非常感激。 是的,您应该使用逻辑类进行设计。我不明白docTotal_income() 是如何工作的。首先,它不遵循 Java 命名约定。描述性词应大写,第一个除外。所以方法应该是docTotalIncome()。更重要的是,您需要引用 JTable5 JTextFileds 来显示总数。我不明白如何调用 new Doctor() 做到这一点。如果您需要访问这 6 个变量,则应在定义组件并将它们添加到 GUI 的类中定义代码。

以上是关于JTable 错误的列总和值的主要内容,如果未能解决你的问题,请参考以下文章

DecisiontreeClassifier,为啥值的总和是错误的?

RDLC 报告服务在总和列时给出错误

jtable的某一列的列宽怎么设置?

按行值分组的列总和

基于R中其他列的列值总和[重复]

当我使用 DefaultTableModel 从 CachedRowSet 填充 jTable 时,为啥 JTable 的列标题没有更新?