My team and I are creating a program that has a user enter fundraiser information. We have created a GUI that has the user enter a full name, charity name, and amount provided.
A "List" option then pops up and displays the data that was entered.
Here's were the problem begins. If you try and enter more than 1 person's information, the program will delete the old info and list the new info. This means that in our list only 1 row is shown at any given time.
Can anyone please take a look at the code and see what we've done wrong?
I'm sure it's something silly - but any help would be appreciated !
package fundraiser;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import java.awt.event.*;
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
public class FundRaiser extends JFrame
{
private JLabel nameMessage; // A message asking for the donor's name
private JLabel charityMessage; // A message asking the user for the name of the charity
private JLabel pledgeMessage; // The message telling the user to enter a pledge amount
private JTextField donorName; // Used to hold user input
private JTextField charityName; // Used to hold the charity name
private JTextField pledgeAmount; // Used to hold the pledge amount
private String name; // The donor's name
private String charity; // The charities name
private String pledge; // The pledged amount
private JButton enterButton; // Enters the user input into the file
private JButton listButton;
private JButton exitButton; // Exits the program
// GUI Constructor
public FundRaiser()
{
// Call the JFrame constructor
super("Learning Team B: Fund Raiser Program");
// Set the size of the window
setSize(440, 150);
// Specify what happens when the close button is clicked
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Create the labels, text fields, and buttons
nameMessage = new JLabel("Enter the donors full name: ");
donorName = new JTextField(20);
charityMessage = new JLabel("Enter the name of the charity: ");
charityName = new JTextField(20);
pledgeMessage = new JLabel("Enter the amount pleged: ");
pledgeAmount = new JTextField(20);
enterButton = new JButton("Enter");
enterButton.setMnemonic(KeyEvent.VK_E);
enterButton.setToolTipText("Click here to enter a pledge");
listButton = new JButton("List");
listButton.setMnemonic(KeyEvent.VK_L);
listButton.setToolTipText("Click here to view a table of donor info");
exitButton = new JButton("Exit");
exitButton.setMnemonic(KeyEvent.VK_X);
exitButton.setToolTipText("Click here to exit the program");
// Add an action listener to the buttons
enterButton.addActionListener(new EnterButtonListener());
listButton.addActionListener(new ListButtonListener());
exitButton.addActionListener(new ExitButtonListener());
// Set the layout style
setLayout(new FlowLayout());
// Add the labels, text fields, and buttons to the panel
add(nameMessage);
add(donorName);
add(charityMessage);
add(charityName);
add(pledgeMessage);
add(pledgeAmount);
add(enterButton);
add(listButton);
add(exitButton);
setVisible(true);
}
public class EnterButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
// Retrieve the input from the user
name = donorName.getText();
charity = charityName.getText();
pledge = pledgeAmount.getText();
}
}
public class ListButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String[][] rowAndColumn = {
{name, charity, pledge},
};
// defines the header
String[] header = {"Name", "Charity", "Pledge Amount"};
// build the GUI
FundRaiser twm = new FundRaiser(rowAndColumn, header);
}
}
Team model;
// constructor that will display a JTable based on elements received as arguments
FundRaiser(Object[][] obj, String[] header)
{
super("Donor List");
// JPanel to show the JTable
JPanel panel = new JPanel(new BorderLayout());
// This is the constructor of our JTable model
model = new Team(obj, header);
// This is the table from that model
JTable table = new JTable(model);
panel.add(new JScrollPane(table));
add(panel); // This adds panel to frame and then displays it
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
pack();
}
// Create the exit button listener
private class ExitButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
}
public static void main(String[] args)
{
new FundRaiser();
}
// The class "Team" extends the AbstractTableModel. This allows us to display a JTable
class Team extends AbstractTableModel {
// Creates an ArrayList for all items within our program
ArrayList<Object[]> al;
// This adds the header(s)
String[] header;
// This code is for the constructor
Team(Object[][] obj, String[] header)
{
// saves the header
this.header = header;
al = new ArrayList<Object[]>();
// This section copies the rows into the ArrayList
for(int i = 0; i < obj.length; ++i)
al.add(obj[i]);
}
// method that needs to be overload. The row count is the size of the ArrayList
public int getRowCount()
{
return al.size();
}
// method that needs to be overload. The column count is the size of our header
public int getColumnCount()
{
return header.length;
}
// method that needs to be overload. The object is in the arrayList at rowIndex
public Object getValueAt(int rowIndex, int columnIndex)
{
return al.get(rowIndex)[columnIndex];
}
// This is a method to return the column name
public String getColumnName(int index)
{
return header[index];
}
// This method will add new line(s) to the table
void add()
{
String[] str = new String[3];
str[0] = donorName.getText();
str[1] = charityName.getText();
str[2] = pledgeAmount.getText();
al.add(str);
//This informs the GUI table of data changes
//fireTableDataChanged();
}
}
}