2015-07-10 5 views
0

Сценарий:
JTable содержит следующие данные, я пытался описать то, что я пытаюсь сделать в изображении ниже: - enter image description hereJTable ошибочного суммирования столбца значения

Итак, я предполагаю, что я способный объяснить, чего я пытаюсь достичь здесь.

Проблема столкнулась Не отображать точные результаты (суммирование), конечно. Код, который я использовал это:

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"); 
     } 
    } 

Я вызываю метод docTotal_Income() после уточнения JTable с Document Listener (работает отлично) и, наконец, выпустив в eventListener на JButton.

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()', спасибо за это, другие вещи, о которых вы упомянули, обязательно будут иметь в виду в долгосрочной перспективе. * Обучение так легко начинающим с SO и людям, как вы, @ camickr * – mustangDC

+0

И еще одна вещь, я создаю «новый доктор() ....», потому что это другой класс «easypath», где я звоню, я поступаю правильно или мне что-то менять? – mustangDC

+0

Я не понимаю ваш дизайн или понимаю, что вы пытаетесь сделать. Но да, я подозреваю, что нет смысла создавать новый класс, когда вы нажимаете кнопку. Если вы фильтруете результаты своей таблицы, вы позволяете таблице фильтровать строки, нет необходимости создавать новую таблицуModel. Прочтите учебник Swing на тему «Как использовать таблицы» для примера фильтрации. – camickr

Смежные вопросы