如何计算jtable中的数据并显示在我的gui底部

问题描述 投票:-1回答:2

我有这样的api。它显示了具有3列的JTable。我希望当我将价格和数量插入jtable结果时,我会在jframe的底部看到。例如,我在图片上插入数据,然后得到结果(2 * 5)+(2 * 5)= 20。我的结果将是20.而这个结果将在gui窗口的底部看到。

enter image description here

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class Demo extends JFrame implements ActionListener{

    private static void createAndShowUI() {

        JFrame frame = new JFrame("Customer Main");
        frame.getContentPane().add(new FuGui(), BorderLayout.CENTER);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                createAndShowUI();
            }
        });
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub

    }
}

class FuGui extends JPanel {
    FuDisplayPanel displayPanel = new FuDisplayPanel();
    FuButtonPanel buttonPanel = new FuButtonPanel(); 
    FuInformationPanel informationPanel = new FuInformationPanel();

    public FuGui() {
        //JTextField textField;
        //textField = new JTextField(20);
        //textField.addActionListener(this);
        JPanel bottomPanel = new JPanel();
        bottomPanel.add(buttonPanel);
        bottomPanel.add(Box.createHorizontalStrut(10));
        bottomPanel.add(informationPanel);

        setLayout(new BorderLayout());
        add(displayPanel, BorderLayout.CENTER);
        add(bottomPanel, BorderLayout.SOUTH);

        buttonPanel.addInfoBtnAddActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                String name = informationPanel.getName();
                String price = informationPanel.getPrice();
                String quantity = informationPanel.getQuantity();

                displayPanel.addRow(name, price, quantity);
            }
        });
    }
}

class FuDisplayPanel extends JPanel {
    private String[] COLUMNS = {"Name", "Price", "Quantity"};
    private DefaultTableModel model = new DefaultTableModel(COLUMNS, 1);
    private JTable table = new JTable(model);

    public FuDisplayPanel() {
        setLayout(new BorderLayout());
        add(new JScrollPane(table));
    }

    public void addRow(String name, String price, String quantity) {
        Object[] row = new Object[3];
        row[0] = name;
        row[1] = price;
        row[2] = quantity;
        model.addRow(row);
    }
}

class FuButtonPanel extends JPanel {
    private JButton addInfoButton = new JButton("Add Information");

    public FuButtonPanel() {
        add(addInfoButton);
    }

    public void addInfoBtnAddActionListener(ActionListener listener) {
        addInfoButton.addActionListener(listener);
    }
}

class FuInformationPanel extends JPanel {
    private JTextField nameField = new JTextField(10);
    private JTextField priceField = new JTextField(10);
    private JTextField quantityField = new JTextField(10);

    public FuInformationPanel() {
        add(new JLabel("Kwota:"));
        add(nameField);
        add(Box.createHorizontalStrut(10));
        // add(new JLabel("Price:"));
        // add(priceField);
        //add(new JLabel("Quantity:"));
        //  add(quantityField);
    }

    public String getName() {
        return nameField.getText();
    }

    public String getPrice() {
        return priceField.getText();
    }

    public String getQuantity() {
        return quantityField.getText();
    }
}
java swing jtable
2个回答
0
投票

在类FuDisplayPanel中更新你的addRow方法,以返回像这样的总和

public int addRow(String name, String price, String quantity) {
    Object[] row = new Object[3];
    row[0] = name;
    row[1] = price;
    row[2] = quantity;
    model.addRow(row); 
    int total = 0;
    for (int count = 0; count < model.getRowCount(); count++){
        price = model.getValueAt(count, 1).toString();
        quantity = model.getValueAt(count, 2).toString();
        if(price != null && !price.trim().equals("") && quantity != null && !quantity.trim().equals("")) {
            total += Integer.parseInt(price) * Integer.parseInt(quantity);
        }
    }
    return total;
}

public class FuButtonPanel extends JPanel {
    private JButton addInfoButton = new JButton("Add Information");
    public JLabel total = new JLabel("Total : ");

    public FuButtonPanel() {
        add(addInfoButton);
        add(total);
    }

    public void addInfoBtnAddActionListener(ActionListener listener) {
        addInfoButton.addActionListener(listener);
    }

    public void setTotal(int total) {
        this.total.setText("Total : " + total);
    }
}

并在FuGui.class执行此操作

int total = displayPanel.addRow(name, price, quantity);
buttonPanel.setTotal(total);

0
投票

通过模型访问表中的基础数据(Swing基础):

TableModel model = table.getModel();

向表模型添加侦听器以执行自动更新:

TableModelListener listener = new TableModelListener(tableChanged(TableModelEvent e) { 
// update code here
}};

table.getModel().addTableModelListener(listener);
© www.soinside.com 2019 - 2024. All rights reserved.