2017-04-06 17 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