2016-05-03 2 views
-1

Wie würde ich die SetBalance() -Methode aus der Account-Klasse in der AccountApplet-Klasse aufrufen, ich glaube, es sollte in der actionPerformed-Methode in der AccountApplet-Klasse gehen.Aufruf und Übergabe von Parametern von einer Klasse in eine andere

Hinweis, wenn ich ein neues Kontoobjekt in Actionperformed erstellen, bekomme ich diesen Fehler AccountApplet.java:83: Fehler: Konstruktor Konto in der Klasse Konto kann nicht auf bestimmte Typen angewendet werden; Konto account = neues Konto(). SetBalance; ^ erforderlich: int, double gefunden: keine Argumente Grund: tatsächliche und formale Argument-Listen in der Länge unterscheiden

Hier ist meine Klasse Konto

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; 


     } 

    } 

Dort wird die AccountApplet Klasse ist, wo der Anruf gehen wird schließlich zu gehen, gibt es ein Kontoobjekt in der refreshfields Methode

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 
+0

ein wenig benötigen weitere Informationen. Haben Sie ein Account-Objekt in Ihrer AccountApplet-Klasse? –

+0

Sie müssten die Ein- oder Auszahlungsfunktionen in der entsprechenden Klausel des if-Konstrukts aufrufen. BTW, Sie haben doppelte if-Klauseln in Ihrer Funktion zum Zurückziehen .... – jr593

Antwort

0

bitte eine Instanz der Klasse Konto erstellen und dann th rufen e setBalance Methode übergeben in Ihre Parameter wie dieser

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

    }  
+0

Ich bekomme diesen Fehler AccountApplet.java:83: error: constructor Konto in der Klasse Account kann nicht auf bestimmte Typen angewendet werden; Konto account = neues Konto(); ^ erforderlich: int, double gefunden: keine Argumente Grund: tatsächliche und formale Argument-Listen in der Länge unterscheiden –

+0

bitte ich habe die ans bearbeiteten Parameter in die constructor.replace – suulisin

1

Sie benötigen ein Konto Objekt in der AccountApplet Klasse instanziiert, wenn Sie es verwenden möchten. Dies würde an der Spitze der AccountApplet Klasse mit den anderen Eigenschaften, die Sie

*

nicht vergessen, die Parameter definiert haben gestellt werden Sie hinzufügen (wählte ich die 1 und die 20 zufällig)

Account newAccount = new Account(1, 20); 

Sie sind jetzt in der Lage, die Objektmethoden zu verwenden. Wenn Sie zum Beispiel mögen einen Betrag einzahlen, könnten Sie wie folgt vorgehen:

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

Die Codezeile

newAccount.deposit(dptf) 

ruft die Einzahlungsmethode die Klasse Account

können Sie hier sehen, dass das Guthaben wird ebenfalls aktualisiert (siehe die Einzahlungsmethode in der Klasse Konto)

Die Zeile

balance += amount 

aktualisiert die Waage (diese Zeile Code entspricht = Balance + Betrag zum Ausgleich)

+0

die mit realen Werten schließen Wie bekomme ich die Balance aktualisieren?? –

+0

Aktualisiert mit einer Erläuterung, wie das Kontostand ebenfalls aktualisiert wird –

Verwandte Themen