我正在尝试制作POS系统。 我想让我的JTable将现有商品添加到同一行,同时调整其数量价格。
例如:产品1已存在于表格中,我想添加相同的产品1,但数量不同。该附加产品1将其数量添加到表中已有的先前产品1中,然后调整产品1的价格。
希望我明白自己。答案 0 :(得分:0)
基于我对您的问题的理解以及评论中的内容。我认为你基本上需要使用表模型来操纵JTable中的数据。 (Oracle's tutorial on Jtable) 逻辑将是
当使用点击按钮添加产品和数量时,您应该知道产品是否已经在表中
model.getValueAt(i,PRODUCT_COL)!= null&& model.getValueAt(i,PRODUCT_COL).equals(product)
如果已添加产品,请找出原始数量并将新数量添加到原始数量
int orignialQuantity = Integer.parseInt(model.getValueAt(existingProductRowIndex,QUANTITY_COL).toString()); model.setValueAt(orignialQuantity + quantity,existingProductRowIndex,QUANTITY_COL);
否则,为新产品插入新行
model.addRow(new Object [] {product,quantity});
运行示例:
public class POS extends JFrame {
String[] columns = {"Product", "Quantity"};
private final static int PRODUCT_COL = 0;
private final static int QUANTITY_COL = 1;
TableModel tableModel = new DefaultTableModel(columns, 0);
JTable table = new JTable(tableModel);
JComboBox comboBox = new JComboBox(new String[]{"Apple", "Banana"});
JTextField quantityJtf = new JTextField(10);
JButton jButton = new JButton("Add");
POS() {
this.setLayout(new FlowLayout());
this.add(new JScrollPane(table));
this.add(comboBox);
this.add(quantityJtf);
this.add(jButton);
jButton.addActionListener(new MyActionListener());
}
private class MyActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String product = comboBox.getSelectedItem().toString();
int quantity = Integer.parseInt(quantityJtf.getText().trim());
DefaultTableModel model = (DefaultTableModel) table.getModel();
int rowCount = model.getRowCount();
int existingProductRowIndex = -1;
for (int i = 0; i < rowCount; ++i) {
if (model.getValueAt(i, PRODUCT_COL) != null && model.getValueAt(i, PRODUCT_COL).equals(product)) {
existingProductRowIndex = i;
break;
}
}
if (existingProductRowIndex > -1) {
int orignialQuantity = Integer.parseInt(model.getValueAt(existingProductRowIndex, QUANTITY_COL).toString());
model.setValueAt(orignialQuantity + quantity, existingProductRowIndex, QUANTITY_COL);
} else {
model.addRow(new Object[]{product, quantity});
}
}