2017-04-06 42 views
0

我有一個Till系統,我希望將項目添加到GUI側的我的訂單表(JTable)。我還想要點擊每個JButton時的訂單總數。我的問題是,雖然我似乎無法使每個JButton的監聽器方法都足夠動態,所以總數將根據訂單上是否添加或刪除項目進行更新。它是在JTextField中按下的每個項目的總和,但它不會將它舍入到應該是2的小數位的正確數目。我嘗試過使用DecimalFormat並且它沒有工作。這是我的一個聽衆方法。如果我可以使這個方法正常工作並使其動態化,那麼我可以將相同的原則應用於其餘的偵聽器方法。如果任何人都能指出我正確的方向,我會非常感激,謝謝。我如何使actionListener方法動態

// Small Americano ActionListener 
     americanoSmall.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       try { 
        String query = "select ProductName, Price from product where ProductID = 24"; 
        java.sql.PreparedStatement pst = connection.prepareStatement(query); 
        ResultSet rs = pst.executeQuery(); 

        // Loop through the ResultSet and transfer in the Model 
        java.sql.ResultSetMetaData rsmd = rs.getMetaData(); 
        int colNo = rsmd.getColumnCount(); 
        while (rs.next()) { 
         Object[] objects = new Object[colNo]; 

         for (int i = 0; i < colNo; i++) { 
          objects[i] = rs.getObject(i + 1); 
         } 
         DefaultTableModel model = (DefaultTableModel) table.getModel(); 
         model.addRow(objects); 
         Stock s = new Stock(); 
         total = total + s.getItemPrice(24); 
         totalTF.setText(String.valueOf(total)); 
         totalTF.setText(String.format("%.2f", total)); 

        } 
        TableModel model = (DefaultTableModel) table.getModel(); 
        table.setModel(model); 
       } catch (Exception e1) { 
        e1.printStackTrace(); 
       } 
      } 
     }); 
+1

考慮到這一點,總數是對'TableModel'中信息的反映,所以當你更新數據庫時不是試圖更新計數器,而是當'TableModel'改變時更新計數器 - 這提供了並將數據更新與數據庫分開分離,使其更加靈活且更易於測試 – MadProgrammer

+0

*「我嘗試過使用DecimalFormat並且它沒有工作」* - 它是如何工作的?什麼是輸入,輸出是什麼,它與預期結果有什麼不同?你是如何使用它的?在處理金錢時,最好使用'BigDecimal'或'long',但這可能超出了分配的範圍 – MadProgrammer

+0

我試過了:DecimalFormat df = new DecimalFormat(「#。00」); totalTF.setText(Double.toString(df.format(total))); – Movillian

回答

1

我想也有它足夠的動態,這樣,如果順序編輯 - 即:東西是從列表中刪除,全部更新相應

添加TableModelListenerTableModel。數據更改或行添加或刪除時將生成事件。然後,您只需遍歷模型中的數據以重新計算總數。

不要試圖保持運行總數,因爲當你刪除一行時,你將不知道要從總數中移除多少。

+0

我試圖實現tableModelListener,但它根本不適合我。我認爲這是因爲我的代碼有點歪斜。任何人都可以幫助我,因爲我一直在這個問題上困擾了好幾天。我不是要求有人爲我做。我將重新編輯我一直在嘗試的代碼。 – Movillian