[英]Calling and passing parameters from one class to another
我將如何從 AccountApplet 類中的 Account 類調用 setBalance() 方法,我相信它應該在 AccountApplet 類中的 actionPerformed 方法中。
請注意,當我在 actionperformed 中創建一個新的帳戶對象時,出現此錯誤 AccountApplet.java:83: 錯誤:類 Account 中的構造函數 Account 不能應用於給定類型; Account account = new Account().setBalance; ^ 要求:int,double found:無參數原因:實際和形式參數列表的長度不同
這是我的帳戶類
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;
}
}
有一個 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
如果你想使用它,你需要在 AccountApplet 類中實例化一個 Account 對象。 這將與您定義的其他屬性一起放在 AccountApplet 類的頂部
*不要忘記添加參數(我隨機選擇了1和20)
Account newAccount = new Account(1, 20);
您現在可以使用對象方法。 例如,如果您想存入一筆金額,您可以執行以下操作:
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();
}
代碼行
newAccount.deposit(dptf)
調用 Account 類的存款方法
您可以在此處看到余額也在更新(查看 Account 類中的存款方法)
線
balance += amount
更新余額(這行代碼相當於 balance = balance + amount)
請創建 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.