我有一个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();
}
}
});
考虑到这一点,总数是对'TableModel'中信息的反映,所以当你更新数据库时不是试图更新计数器,而是当'TableModel'改变时更新计数器 - 这提供了并将数据更新与数据库分开分离,使其更加灵活且更易于测试 – MadProgrammer
*“我尝试过使用DecimalFormat并且它没有工作”* - 它是如何工作的?什么是输入,输出是什么,它与预期结果有什么不同?你是如何使用它的?在处理金钱时,最好使用'BigDecimal'或'long',但这可能超出了分配的范围 – MadProgrammer
我试过了:DecimalFormat df = new DecimalFormat(“#。00”); totalTF.setText(Double.toString(df.format(total))); – Movillian