简体   繁体   中英

Calling and passing parameters from one class to another

How would i call the setBalance() method from the Account class in the AccountApplet class, I believe it should go in the actionPerformed method in the AccountApplet class.

note when i create a new account object in actionperformed i get this error AccountApplet.java:83: error: constructor Account in class Account cannot be applied to given types; Account account = new Account().setBalance; ^ required: int,double found: no arguments reason: actual and formal argument lists differ in length

Here is my Account class

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



    public class Account
    {
      int id         = 1234;
      double balance = 1000.00;

      Account (int id, double balance)
      {
        id      = 1234;
        this.balance = balance;
      }

      public int getId()
      {

        return id; 
      }

      public double getBalance()
      {
        return balance;   
      }

      public void setBalance(double balance) throws NegativeAmountException
      {
        if ( balance < 0)
          throw new NegativeAmountException();
        this.balance = balance;
      }

      public void deposit(double amount) throws NegativeAmountException
      {
        if (amount < 0)
        throw new NegativeAmountException();
        balance += amount;
      }

      public void withdraw(double amount) throws NegativeAmountException,
                                                 InsufficientFundsException
      {

        if (amount <= balance )
        {
          throw new NegativeAmountException();
        }

        if (amount <= balance )
        {
          throw new InsufficientFundsException();
        }

        balance -= amount;


      }

    }

There is the AccountApplet class where the call is going to eventually go, there is an account object in the refreshfields method

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
import java.text.NumberFormat;


public class AccountApplet extends JApplet implements ActionListener
{    
  //  For West
  public JLabel  ai       = new JLabel("Account ID ");
  public JTextField  aitf = new JTextField();
  public JLabel  ab       = new JLabel("Account Balance ");
  public JTextField  abtf = new JTextField();

  //  For East
  public JButton     dp   = new JButton ("Deposit");
  public JTextField  dptf = new JTextField();
  public JButton       wt = new JButton ("Withdraw");
  public JTextField  wttf = new JTextField();

  // For South
  public JLabel  status   = new JLabel("");  

  public void init()
  {
    this.setSize(400, 90);

    //----------------------
    //  Set up the Structure
    //----------------------

    Container      c = getContentPane();
    JPanel         b = new JPanel(new BorderLayout());
    JPanel      west = new JPanel(new GridLayout(2,2));
    JPanel      east = new JPanel(new BorderLayout());
    JPanel depo_with = new JPanel(new GridLayout(2,2));

    // Add BorderLayout to the container
    c.add(b);

    // Add everything to West
    b.add(west, BorderLayout.WEST);
    west.setBorder(new TitledBorder("Display Account Information"));
    west.add(ai);
    west.add(aitf);
    aitf.setEditable(false);
    west.add(ab);
    west.add(abtf);
    abtf.setEditable(false);

    // Add everything to EAST
    b.add(east, BorderLayout.EAST); 
    east.setBorder(new TitledBorder("Deposit or Withdrawl Funds"));    
    east.add(depo_with, BorderLayout.EAST);    
    depo_with.add(dptf);
    depo_with.add(dp);
    depo_with.add(wttf);
    depo_with.add(wt);   
    dp.addActionListener(this);
    wt.addActionListener(this);

    // Add everything to SOUTH
    b.add(status, BorderLayout.SOUTH);

    refreshFields();

  }  // End intit

  public void actionPerformed(ActionEvent e)
  {

    if (e.getSource() == dp)  //  Executes if deposit was clicked
    {
      try 
      {
        getAmount(dptf);
        status.setText("Deposit processed");

       refreshFields();
      } 


      catch (NegativeAmountException nae) 
      {  
       status.setText(nae.getMessage() + " not allowed for deposit");
      }
      catch (EmptyFieldException efe) 
      {  
       status.setText(efe.getMessage() + " not allowed for deposit");
      }
      catch (Exception ex) 
      { 
       status.setText(ex.getMessage() + " not allowed for deposit");
      }    

    }    


    if (e.getSource() == wt)  //  Executes if withdraw was clicked
    {
      try 
      {
        getAmount(wttf);
        status.setText("Withdraw processed");

        refreshFields();
      } 
     // catch (InsufficientFundsException ife) 
     // {  
     //  status.setText(ife.getMessage() + " Insufficient funds");
     // }
      catch (NegativeAmountException nae) 
      {  
       status.setText(nae.getMessage() + " not allowed for withdraw");
      }
      catch (EmptyFieldException efe) 
      {  
       status.setText(efe.getMessage() + " not allowed for withdraw");
      }
      catch (Exception ex) 
      {
        // Something went wrong - handle your error here
        status.setText(" for withdraw");
      }

      refreshFields();
    }
  }


  public void refreshFields()
  {
    NumberFormat fmt = NumberFormat.getCurrencyInstance();
    Account Account1 = new Account(1234, 1000.00);
    aitf.setText("" + Account1.getId());
    abtf.setText("" + fmt.format(Account1.getBalance()));

    // diplays accound id and balance in left text fields
    //should be called when the applet is first displayed and after each valid transaction
  }

 public double getAmount(JTextField tf) throws EmptyFieldException,
                                               NumberFormatException,
                                               NegativeAmountException
 {
   double depo;

   try 
   {
     depo = Double.parseDouble(dptf.getText());  // read in one textfield and convert to a number
   } 
     catch (NumberFormatException nfe)  // catch NumberFormatException
   {
     throw nfe;  // catch throws NumberFormatException
   }



    return depo;
  }  //  End    



} // End Class

You need to instantiate an Account object in the AccountApplet class if you wish to use it. This would be put at the top of the AccountApplet class with the other properties you have defined

*Don't forget to add the parameters (I chose the 1 and the 20 randomly)

Account newAccount = new Account(1, 20);

You are now able to use the objects methods. For example if you wish to deposit an amount, you could do the following:

public void actionPerformed(ActionEvent e)
{

  if (e.getSource() == dp)  //  Executes if deposit was clicked{
    try 
    {
      getAmount(dptf);

      newAccount.deposit(dptf)

      status.setText("Deposit processed");

     refreshFields();
    } 

The line of code

newAccount.deposit(dptf)

invokes the deposit method the Account class

You can see here that the balance is getting updated as well (look at the deposit method in the Account class)

The line

balance += amount

updates the balance (this line of code is equivalent to balance = balance + amount)

please create an instance of the Account class and then call the setBalance method passing in your parameter like this

public void actionPerformed(ActionEvent e)
  {
    Account account=new Account(1,0);//where 1 is your account id and 0 is your initail balance
   //Yor call here
    if (e.getSource() == dp)  //  Executes if deposit was clicked
    {
      try 
      {
        account.setBalance(20);
        getAmount(dptf);
        status.setText("Deposit processed");

       refreshFields();
      } 


      catch (NegativeAmountException nae) 
      {  
       status.setText(nae.getMessage() + " not allowed for deposit");
      }
      catch (EmptyFieldException efe) 
      {  
       status.setText(efe.getMessage() + " not allowed for deposit");
      }
      catch (Exception ex) 
      { 
       status.setText(ex.getMessage() + " not allowed for deposit");
      }    

    }    

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM