2013-06-05 2 views
0

Я программирую GUI (банковский счет). Все работает нормально; но сталкиваясь с проблемой при отображении текущего баланса в JPanel, он должен отображать баланс, когда я нажимаю кнопку отправки. Я пробовал много разных способов, но все же безуспешно.Показать и обновить баланс в JPanel

Моя информация корректно отображается в JTextArea.

Но я не могу заставить его отображать сумму в третьем JPanel («Current Amount»). Сумма, которую я вводил в JTextField, и нажмите «Отправить», она должна отображаться в JPanel («Текущая сумма»).

И всякий раз, когда я ввожу один и тот же идентификатор человека и нажимаю кнопку отправки, сумма должна обновляться. У меня действительно возникла проблема с построением логики. Я опубликовал всю кодировку. Пожалуйста, смотрите мой кодирующая ниже:

// счета класса класса

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

} 

// Банковский класс

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

// Драйвер для запуска программы

public class BankTest { 

    public static void main(String[] args) 
    { 
     Bank test = new Bank(); 
    } 
} 
+0

Этот вопрос больше подходит для проверки кода. Кроме того, довольно много проблем в коде. –

+0

Я немного слаб на английском. Позвольте мне приложить скриншот, тогда вопрос будет иметь смысл – user2448774

+0

@ user2448774 Вам нужно добавить в свой actionListner что-то вроде 'l6.setText (amount.getText());' [Class JTextComponent # setText()] (http: //docs.oracle.com/javase/7/docs/api/javax/swing/text/JTextComponent.html#setText(java.lang.String)) – Smit

ответ

1

У вас есть некоторые работы ...

Я могу дать вам несколько советов:

  • в actionPerformed вы не должны создать новый Account acnt каждый раз при нажатии кнопки. Вместо этого вы должны иметь hashmap (или аналогичный), включая Account объекты в качестве значений и Account Number в качестве ключа для поиска.
  • Как только у вас есть глобальные экземпляры Account, которые можно просмотреть с помощью hashmap, вам необходимо выполнить сложение и вычитание с помощью методов acnt.setBalance.

Вот пример кода, который в основном изменяет свой код, чтобы работать только для одной учетной записи, но делает вычитание и сложение правильно:

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


     }  
    } 

Чтобы реально отобразить текущий баланс счета, вы будет использовать:

area.append("\nBalance="+acnt.getBalance()); 
Смежные вопросы