package panels;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import frames.IMainFrame;
import resources.Customer;
import resources.CustomersModel;
//-------------------------------------------------------------------------
// overview of customers
public class MainPanel extends JPanel {
// frame
private IMainFrame mainFrame;
// model
private CustomersModel model;
// table
private JTable panelTable;
private DefaultTableModel panelTableModel;
private String[] columnNames = { "name", "point", "total" };
// buttons
private JButton addButton;
private JButton removeButton;
private JButton showHistoryButton;
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// constructor
// -------------------------------------------------------------------------
//
public MainPanel(IMainFrame mainFrame, CustomersModel model) {
super(new BorderLayout());
// initialize frame
this.mainFrame = mainFrame;
// initialize model
this.model = model;
// customerTable = new HashMap<Integer, Customer>();
// initialize table
panelTableModel = new DefaultTableModel(columnNames, 0);
panelTable = new JTable(panelTableModel);
// deny to edit cell
panelTable.setDefaultEditor(Object.class, null);
// add buttons
addButton = new JButton("Add");
removeButton = new JButton("Remove");
showHistoryButton = new JButton("Show History");
// add listener
addButton.addActionListener(new AddActionHandler());
removeButton.addActionListener(new RemoveActionHandler());
showHistoryButton.addActionListener(new ShowHistoryActionHandler());
JPanel buttonPanel = new JPanel();
buttonPanel.add(addButton, BorderLayout.WEST);
buttonPanel.add(removeButton, BorderLayout.EAST);
add(buttonPanel, BorderLayout.CENTER);
// add show history
JPanel showButtonPanel = new JPanel();
FlowLayout flowLayout = new FlowLayout();
showButtonPanel.add(showHistoryButton, BorderLayout.SOUTH);
showButtonPanel.setLayout(flowLayout);
add(showButtonPanel, BorderLayout.SOUTH);
// add scroll menu
JScrollPane listScrollPane = new JScrollPane(panelTable);
add(listScrollPane, BorderLayout.NORTH);
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// public
// -------------------------------------------------------------------------
//
public void updateTableByTransition() {
for (int i = 0; i < panelTableModel.getRowCount(); i++) {
// name, points, total
panelTableModel.setValueAt(model.getCustomers().get(i).getName(), i, 0);
panelTableModel.setValueAt(model.getCustomers().get(i).getPoints(), i, 1);
panelTableModel.setValueAt(model.getCustomers().get(i).getTotal(), i, 2);
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// private
// -------------------------------------------------------------------------
//
private void transitionToHistory(IMainFrame mainFrame, int index) {
mainFrame.showHistoryPanel(this, index);
}
// -------------------------------------------------------------------------
//
private Customer createNewCustomerByName(String name) {
Customer customer = new Customer(name + model.getCustomers().size());
return customer;
}
// -------------------------------------------------------------------------
//
private Object[] generateCustomerRow(Customer customer) {
Object[] data = { customer.getName(), customer.getPoints(), customer.getTotal() };
return data;
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// interface
// -------------------------------------------------------------------------
// add button's event
private class AddActionHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
Customer customer = createNewCustomerByName("name");
model.getCustomers().add(customer);
panelTableModel.addRow(generateCustomerRow(customer));
}
}
// -------------------------------------------------------------------------
// remove button's event
private class RemoveActionHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (panelTable.getSelectedRow() < 0)
return;
if (1 < panelTable.getRowCount()) {
model.getCustomers().remove(panelTable.getSelectedRow());
panelTableModel.removeRow(panelTable.getSelectedRow());
}
}
}
// -------------------------------------------------------------------------
// transition to history
private class ShowHistoryActionHandler implements ActionListener {
// -------------------------------------------------------------------------
//
public void actionPerformed(ActionEvent e) {
if (-1 < panelTable.getSelectedRow())
transitionToHistory(mainFrame, panelTable.getSelectedRow());
}
}
}