2015-07-10 58 views
0

方案
JTable中包含以下數據,我試圖來形容我想在下面的圖片做: - enter image description hereJTable中錯誤的列求和值

所以,我想我能夠解釋我在這裏想要達到的目標。

問題 不顯示準確的結果(總和),ofcourse。我已經使用的代碼是:

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 ListenerJTable後調用該方法docTotal_Income()工作正常),最後射擊的JButtoneventListener

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

畢竟這些我得到不規則的總和。我猜測我在某個地方出現了邏輯錯誤,但是我還有其他什麼東西丟失了嗎?

我很樂意欣賞這方面的任何建議。謝謝你的時間

+0

什麼是「非正規求和」?你的總分是0.01嗎?減去1,000,000?總數是[NaN](http://docs.oracle.com/javase/8/docs/api/java/lang/Double.html#NaN)?無窮? – VGR

+0

不規則並不意味着大小或以往的任何錯誤。我試圖解釋它給出了錯誤的求和,5 + 5 = 20等等......我認爲這是我的一個**邏輯錯誤**,但我無法指出它,所以把整個場景放入這個訂單 – mustangDC

+0

把數字放到XxxTableModel中,覆蓋模型定義裏面的getColumnClass – mKorbel

回答

1
new doctor().docTotal_Income(); // doctor is the class 

首先,所有的類名應該以大寫字母開頭。 「醫生()」應該是「Doctor()」。

你爲什麼要創建一個新的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()); 
} 
+0

就像魅力一樣,'getModel()'這個錯誤感謝了,你提到的其他東西,從長遠來看一定會牢記在心。 *對於初學者來說學習是如此容易,像你這樣的人@ camickr * – mustangDC

+0

還有一件事,我正在創建'新醫生()....',因爲這是一個不同的類'easypath'我打電話,我在做正確的事情還是應該改變一些事情? – mustangDC

+0

我不明白你的設計或理解你正在嘗試做什麼。但是,是的,我懷疑當你點擊一個按鈕時沒有理由創建一個新班級。如果您要過濾表的結果,那麼您讓表過濾行,則無需創建新的TableModel。閱讀關於「如何使用表格」的Swing教程以獲得過濾示例。 – camickr