I am programming a GUI (Bank Account). Everything is working fine; but facing problem in displaying current balance in JPanel, it should display the balance when I hit submit button. I have tried many different ways but still unsuccessful.
My information are displaying correctly in JTextArea.
But I cannot make it display the amount in the 3rd JPanel("Current Amount"). The amount I input in JTextField and click submit, it should display in the JPanel("Current Amount").
And whenever I enter the same id of a person and click submit button, the amount should get updated. I am really having problem with building the logic. I have posted the whole coding. Please see my coding below:
//Account class
public class Account
{
private String id;
private double balance;
private String name;
private double withdraw;
private double deposit;
public Account(String id, double balance, String name, double withdraw, double deposit)
{
this.id = id;
this.balance = balance;
this.name = name;
this.withdraw = withdraw;
this.deposit = deposit;
}
public Account()
{
}
public void setId(String acID)
{
this.id = acID;
}
public void deposit(double sum)
{
this.balance = this.balance + sum;
}
public void withdraw(double sum)
{
this.balance = this.balance - sum;
}
public String getId()
{
return this.id;
}
public void setBalance(double blnc)
{
this.balance = blnc;
}
public double getBalance()
{
return this.balance;
}
public String getName()
{
return this.name;
}
public void setName(String a)
{
this.name = a;
}
public double getWithdraw()
{
return this.withdraw;
}
public double getDeposit()
{
return this.deposit;
}
public String toString()
{
return " " + getId()
+ " - " + getName()
+ " - " + getBalance();
}
}
//Bank class
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.List;
import java.util.ArrayList;
public class Bank implements ActionListener,ItemListener
{
private List<Account> store;
DefaultListModel listModel = new DefaultListModel();
JList list = new JList(listModel);
FlowLayout flow = new FlowLayout();
ButtonGroup group = new ButtonGroup();
JFrame frame = new JFrame("Lexus Bank");
JPanel p = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
JPanel p4 = new JPanel();
JRadioButton a = new JRadioButton("Savings");
JRadioButton b = new JRadioButton("Current");
JRadioButton c = new JRadioButton("Deposit");
JRadioButton d = new JRadioButton("Withdraw");
JLabel l1 = new JLabel("A/C No:");
JLabel l2 = new JLabel("A/C Name:");
JTextField accID = new JTextField(10);
JTextField accName = new JTextField(10);
JLabel l3 = new JLabel();
JLabel l4 = new JLabel();
JLabel l5 = new JLabel("Amount: " );
JLabel l6 = new JLabel("Current \n Amount: " );
JLabel currentBal = new JLabel();
JTextField amount = new JTextField(10);
JButton button = new JButton("Submit");
JTextArea area = new JTextArea(10,30);
public Bank()
{
store = new ArrayList<Account>();
//Setting values for JFrame
frame.setSize(800,600);
frame.add(p);
frame.add(p2);
frame.add(p3);
frame.add(p4);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Adding the buttons in group
group.add(a);
group.add(b);
group.add(c);
group.add(d);
//Setting value for panel 1
frame.getContentPane().setLayout(flow);
p.setPreferredSize(new Dimension(100,100));
p.setLayout(new GridLayout(2,1));
p.add(a);
p.add(b);
p.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(),"A/C Type"));
//Setting value for panel 2
p2.setPreferredSize(new Dimension(300,100));
p2.setLayout(new GridLayout(4,3));
p2.add(l1);
p2.add(accID);
p2.add(l2);
p2.add(accName);
p2.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(),"Account Details"));
p2.setVisible(false);
//Setting value for panel 3
p3.setPreferredSize(new Dimension(300,150));
p3.setLayout(new FlowLayout());
p3.add(l3);
p3.add(c);
p3.add(l4);
p3.add(d);
p3.add(l5);
p3.add(amount);
p3.add(button);
p3.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(),"Transaction"));
p3.add(l6);
p3.setVisible(false);
//Setting value for panel 4
p4.setLayout(new GridLayout(1,2));
p4.add(area);
p4.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(),"Transaction History"));
p4.setVisible(false);
//Creating Actions
a.addItemListener(this);
b.addItemListener(this);
c.addActionListener(this);
d.addActionListener(this);
button.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
if(source == button)
{
Account amnt = new Account();
amnt.setBalance(Integer.parseInt(amount.getText()));
//currentBal.append(amnt.getBalance());
store.add(amnt);
}
if(e.getSource() == button)
{
if(c.isSelected())
{
Account acnt = new Account();
acnt.setId(accID.getText());
acnt.setName(accName.getText());
acnt.setBalance(Integer.parseInt(amount.getText()));
//store.add(ad);
area.append("\nDP-"+ acnt.toString());
store.add(acnt);
}
if(d.isSelected())
{
Account acnt = new Account();
acnt.setId(accID.getText());
acnt.setName(accName.getText());
acnt.setBalance(Integer.parseInt(amount.getText()));
area.append("\nWD-"+acnt.toString());
store.add(acnt);
}
}
}
public void itemStateChanged(ItemEvent e)
{
Object source = e.getSource();
if(source == a)
{
p2.setVisible(true);
p3.setVisible(true);
p4.setVisible(true);
}
if(source == b)
{
p2.setVisible(true);
p3.setVisible(true);
p4.setVisible(true);
}
}
}
//Driver class to run the program
public class BankTest {
public static void main(String[] args)
{
Bank test = new Bank();
}
}
You have some work to do...
I can give you some pointers:
actionPerformed
you should not create a new Account acnt
every time a button is pressed. Instead you should have a hashmap
(or similar) including Account
objects as values and Account Number
as key for lookup.Account
which can be looked up via hashmap, you need to actually do the addition and subtraction using the acnt.setBalance
methods. Here is a code sample that basically changes your code to work for only one account, but which does the subtraction and addition correctly:
Account acnt = new Account();
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
if(source == button)
{
}
if(e.getSource() == button)
{
if(c.isSelected())
{
acnt.setId(accID.getText());
acnt.setName(accName.getText());
acnt.setBalance(acnt.getBalance()+Integer.parseInt(amount.getText()));
//store.add(ad);
area.append("\nDP-"+ acnt.toString());
store.add(acnt);
}
if(d.isSelected())
{
acnt.setId(accID.getText());
acnt.setName(accName.getText());
acnt.setBalance(acnt.getBalance()-Integer.parseInt(amount.getText()));
area.append("\nWD-"+acnt.toString());
store.add(acnt);
}
}
}
To actually display the current balance of an account, you would use:
area.append("\nBalance="+acnt.getBalance());