如何使actionListener方法动态化

时间:2017-04-06 21:12:55

标签: java swing

我有一个Till系统,我希望在GUI的一侧向我的订单表(JTable)添加项目。我也希望在点击每个JButton时总计订单。我的问题是,我似乎无法使每个JButton的侦听器方法足够动态,因此总数将根据订单中是否添加或删除项目而更新。它是在JTextField中按下每个项目的总计,但它没有将它四舍五入到正确的小数位数,应该是2.我尝试使用DecimalFormat但它没有工作。这是我的一个听众方法。如果我可以使这个方法正常工作并使其动态化,我可以将相同的原理应用于其余的侦听器方法。如果有人能指出我正确的方向,我将非常感激,谢谢你。

// 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 个答案:

答案 0 :(得分:1)

  

我想让它足够动态,以便在订单编辑时 - 即:从列表中删除某些内容,相应的总更新

TableModelListener添加TableModel。更改数据或添加或删除行时将生成事件。然后,您只需遍历模型中的数据即可重新计算总数。

不要试图保持一个总计,因为当你删除一行时,你不知道要从总数中删除多少。