2013-06-03 1 views
0

Я программирую GUI (банковский счет). Я сделал необходимые фреймы, но столкнулся с проблемами при добавлении информации в JTextArea. Я пробовал много разных способов, но все же безуспешно.Добавление элементов в JtextArea и обновление текущего баланса

Когда я выбираю радиокнопку, например «Экономия или ток», другие панели будут видны. И там, в текстовом поле a/c, я укажу ID и имя в двух текстовых полях. После этого я должен выбрать другой RadioButton либо Deposit или Withdraw, а затем вам нужно ввести, сколько баланса нужно внести и снять.

И после ввода всей информации мне нужно нажать кнопку отправки. Когда я нажимаю кнопку «Отправить», вся информация должна отображаться в JTextArea, и где бы я ни депозит или не снял, он должен обновить информацию. И здесь я столкнулся с проблемой, я загнал много различных способов, но не ..... Пожалуйста, помогите

Пожалуйста, смотрите мой кодирующая ниже:

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

    public class BankAccount implements ActionListener,ItemListener 
    { 
     private String id; 
     private double balance; 
     private String name; 
     private double withdraw; 
     private double deposit; 

     public BankAccount(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 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 double getBalance() 
     { 
      return this.balance; 
     } 

     public String getName() 
     { 
      return this.name; 
     } 

     public double getWithdraw() 
     { 
      return this.withdraw; 
     } 


      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 l7 = new JLabel(); 
      JTextField amount = new JTextField(10); 
      JButton button = new JButton("Submit"); 

      JTextArea area = new JTextArea(10,30);    


     public BankAccount() 
     { 
      //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) 
      { 
       if(c.isSelected()) 
       { 
        String item = area.getText(); 

        listModel.addElement(item); 
       } 

      }  
     } 


     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 BankAccount_Test { 

    public static void main(String args[]) 
    { 
     BankAccount Test = new BankAccount(); 
    } 


} 
+0

Где в вашем коде вы вообще настройки текста для JTextArea? – Aaron

+0

JTable более подходит для использования вместо области JText. – camickr

ответ

0

Если взять мой совет использовать концепцию объектно-ориентированного программирования путем разделения классов в двух классах

  1. счетов
  2. Bank (основной класс)

таким образом у вас много аккаунтов в вашей программе, и у каждой учетной записи есть своя информация, сохраненная в объекте.

class Accounts{ 
private String id; 
    private double balance; 
    private String name; 
    private double withdraw; 
    private double deposit; 
    //parametric Constructor 
    public Accounts(String id,String name, double balance,double withdraw,double deposit){ 
     setId(id); 
     setName(name); 
     setBalance(balance); 
     setWithdraw(withdraw); 
     setDeposit(deposit); 
    } 
    //Default Construcor: 
    //Highly recommended having it because you have a parametric constructor 
    public Accounts(){ 
    //... 
    } 

/* 
Don't forget setters and Getter 
........ 
*/ 

    @Override 
    public String toString(){ 
     return "ID: "+getId()+"\n" 
       +"Name: "+getName()+"\n" 
       +"Balance: "+getBalance()+"\n" 
       +"Withdraw: "+getWithdraw()+"\n" 
       +"Deposit: "+getDeposit()+"\n"; 
    } 
} 

И это будет ваш Главный класс:

import java.util.List; 
import java.util.ArrayList; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class Bank { 
    private List<Accounts> list ; 
    private JButton submit; 
    //default Constructor 
    public Bank(){ 
     list = new ArrayList<Accounts>(); 
     submit = new JButton("Submit"); 
     submit .addActionListener(this); 
     /* 
     will be alot of code if I create the whole frame 
     but suppose you have created your frame */ 
    } 
    public void actionPerformed(ActionEvent ev){ 
     if(ev.getSource()==submit){ 
     Accounts ac = new Accounts(); 
     ac.setId("id.getText()"); 
     ac.setName("name.getText()"); 
     //... 
     textArea.setText(ac.toString());//see it's easy 
     list.add(ac); 
     } 
    } 
} 
+0

Спасибо, много, я стараюсь ваш, давайте надеемся, что все получится отлично :-D – user2448774

+0

Bro его дает ошибку: конструктор Учетная запись в классе Учетная запись не может применяться к заданным типам ;» Учет не может быть применен к данным типам; \t \t Аккаунт acnt = новый аккаунт(); \t \t не требуется: String, двойная, String, двойные, двойная найдена: нет аргументов причин: фактические и формальных списки аргументов различаются по длине ошибки: не удается найти символ \t \t acnt.setId ("идентификатор.GetText() "); \t \t символ: метод SETID (String) местоположение: переменная acnt типа счета C: \ Users \ Sajid \ Documents \ Bank.java: 122: ошибка: не может найти символ \t \t \t acnt.setName ("name.getText()"); \t \t \t 3 ошибки – user2448774

+0

@ user2448774:. Да, моя ошибка я забыл создать конструктор по умолчанию в 'Account' класса Пожалуйста, смотрите отредактированный ответ – Azad

0

Сделать JTextArea общественности и вызвать .setText() когда вы хотите изменить текст.

public JTextArea textArea = new JTextArea(); 

и позже, вы можете добавить метод, такие как:

public void setText() { 

    textArea.setText("Type something here..."); 
} 
+0

Это что-то, что мне нужно сначала установить текст, а затем вызвать метод getText() для отображения – user2448774

+0

@ user2448774 'getText()' вернет то, что находится в текстовом поле, 'setText()' установит его. Вам не нужно вызывать 'getText()' для его отображения. – Aaron

+0

ohhhh! ... позвольте мне попробовать: – user2448774