在JTable中对类似项进行分组

时间:2015-10-02 03:50:31

标签: java swing jtable

我正在尝试制作POS系统。 我想让我的JTable将现有商品添加到同一行,同时调整其数量价格。

例如:产品1已存在于表格中,我想添加相同的产品1,但数量不同。该附加产品1将其数量添加到表中已有的先前产品1中,然后调整产品1的价格。

希望我明白自己。

1 个答案:

答案 0 :(得分:0)

基于我对您的问题的理解以及评论中的内容。我认为你基本上需要使用表模型来操纵JTable中的数据。 (Oracle's tutorial on Jtable) 逻辑将是

  1. 当使用点击按钮添加产品​​和数量时,您应该知道产品是否已经在表中

    model.getValueAt(i,PRODUCT_COL)!= null&& model.getValueAt(i,PRODUCT_COL).equals(product)

  2. 如果已添加产品,请找出原始数量并将新数量添加到原始数量

    int orignialQuantity = Integer.parseInt(model.getValueAt(existingProductRowIndex,QUANTITY_COL).toString());                 model.setValueAt(orignialQuantity + quantity,existingProductRowIndex,QUANTITY_COL);

  3. 否则,为新产品插入新行

    model.addRow(new Object [] {product,quantity});

  4. 运行示例:

    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});
            }
        }