简体   繁体   English

从一个类调用和传递参数到另一个类

[英]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.我将如何从 AccountApplet 类中的 Account 类调用 setBalance() 方法,我相信它应该在 AccountApplet 类中的 actionPerformed 方法中。

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;请注意,当我在 actionperformed 中创建一个新的帐户对象时,出现此错误 AccountApplet.java:83: 错误:类 Account 中的构造函数 Account 不能应用于给定类型; Account account = new Account().setBalance; Account account = new Account().setBalance; ^ required: int,double found: no arguments reason: actual and formal argument lists differ in length ^ 要求:int,double found:无参数原因:实际和形式参数列表的长度不同

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有一个 AccountApplet 类,调用最终会去那里,refreshfields 方法中有一个 account 对象

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.如果你想使用它,你需要在 AccountApplet 类中实例化一个 Account 对象。 This would be put at the top of the AccountApplet class with the other properties you have defined这将与您定义的其他属性一起放在 AccountApplet 类的顶部

*Don't forget to add the parameters (I chose the 1 and the 20 randomly) *不要忘记添加参数(我随机选择了1和20)

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调用 Account 类的存款方法

You can see here that the balance is getting updated as well (look at the deposit method in the Account class)您可以在此处看到余额也在更新(查看 Account 类中的存款方法)

The line线

balance += amount

updates the balance (this line of code is equivalent to balance = balance + amount)更新余额(这行代码相当于 balance = balance + amount)

please create an instance of the Account class and then call the setBalance method passing in your parameter like this请创建 Account 类的实例,然后调用 setBalance 方法传入您的参数,如下所示

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

    }    

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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