2017-06-06 1 views
0

Ceci est mon code pour les deux classes de fichiers. Que dois-je ajouter/corriger pour que les variables puissent être transférées et imprimées dans l'écouteur d'action JFrame? L'erreur « Aucun champ « (la variable je dans l'auditeur d'action de la classe principale) » a été trouvé dans le type « Suivant »Comment obtenir des informations sur les variables d'une classe à une autre classe Action Listener?

import java.awt.*; //for Dimension 
    import javax.swing.*; //for GUI components 

    public class MortgageCalculator 
    { 
    public static void main (String[] args) 
    { 
    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
    frame.setSize (new Dimension (300, 250)); 
    frame.setTitle ("Mortgage Calculator"); 

    frame.getContentPane().setLayout (new BorderLayout()); 

    frame.getContentPane().add (new JLabel ("       Personal Information"), BorderLayout.NORTH); 

    JPanel centerPanel = new JPanel (new GridLayout (15, 1)); 
    centerPanel.add (new JLabel ("Full Name:")); 
    JTextField nameField = new JTextField(); 
    centerPanel.add (nameField); 
    centerPanel.add (new JLabel ("Your Age:")); 
    JTextField ageField = new JTextField(); 
    centerPanel.add (ageField); 
    centerPanel.add (new JLabel ("Yearly Income:")); 
    JTextField incomeField = new JTextField(); 
    centerPanel.add (incomeField); 
    centerPanel.add (new JLabel()); 
    centerPanel.add (new JLabel ("       Mortgage Information")); 

    centerPanel.add (new JLabel ("Price of Property:")); 
    JTextField priceField = new JTextField(); 
    centerPanel.add (priceField); 
    centerPanel.add (new JLabel ("Down Payment:")); 
    JTextField downPayField = new JTextField(); 
    centerPanel.add (downPayField); 
    centerPanel.add (new JLabel ("Interest Rate:")); 
    JTextField interestRateField = new JTextField(); 
    centerPanel.add (interestRateField); 
    centerPanel.add (new JLabel ("Amortization Period (Years):")); 
    frame.getContentPane().add (centerPanel, BorderLayout.CENTER); 

    JPanel southPanel = new JPanel (new GridLayout (5, 2)); 
    JButton amort20 = new JButton ("20"); 
    southPanel.add (amort20); 
    JButton amort25 = new JButton ("25"); 
    southPanel.add (amort25); 
    JButton amort30 = new JButton ("30"); 
    southPanel.add (amort30); 
    southPanel.add (new JLabel ("Payment Option:")); 
    southPanel.add (new JLabel()); 
    southPanel.add (new JLabel()); 
    JButton paymentWeek = new JButton ("Weekly"); 
    southPanel.add (paymentWeek); 
    JButton paymentBiweek = new JButton ("Biweekly"); 
    southPanel.add (paymentBiweek); 
    JButton paymentMonth = new JButton ("Monthly"); 
    southPanel.add (paymentMonth); 
    //To add a blank line in frame, added three blank JLabels because it is 3 horiontal for grid layout 
    southPanel.add (new JLabel()); 
    southPanel.add (new JLabel()); 
    southPanel.add (new JLabel()); 
    southPanel.add (new JButton ("Clear Information")); 
    southPanel.add (new JLabel()); 
    JButton nextButton = new JButton ("Next"); 
    southPanel.add (nextButton); 
    frame.getContentPane().add (southPanel, BorderLayout.SOUTH); 


    frame.pack(); 
    frame.setVisible (true); 
    nextButton.addActionListener (new Next()); 

    //Gets the personal information from the text fields 
    int age, income, price, downPay, interestRate; 
    String name = nameField.getText(); 
    String ageText = ageField.getText(); 
    age = Integer.parseInt (ageText); 
    String incomeText = incomeField.getText(); 
    income = Integer.parseInt (ageText); 
    //Gets the mortgage information from the text fields 
    String priceText = priceField.getText(); 
    price = Integer.parseInt (ageText); 
    String downPayText = downPayField.getText(); 
    downPay = Integer.parseInt (ageText); 
    String interestRateText = interestRateField.getText(); 
    interestRate = Integer.parseInt (interestRateText); 

} 
} 

Le ActionListener:

import java.awt.*; //for Dimension 
import javax.swing.*; //for GUI components 
import java.awt.event.*; //for MessageListener 

public class Next implements ActionListener 
{ 
public void actionPerformed (ActionEvent event) 
{ 
    //Output frame 
    JFrame frame2 = new JFrame(); 
    frame2.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
    frame2.setSize (new Dimension (300, 250)); 
    frame2.setTitle ("Mortgage Calculator"); 
    frame2.getContentPane().setLayout (new BorderLayout()); 

    JPanel westPanel2 = new JPanel (new GridLayout (3, 1)); 
    JLabel nameLabel = new JLabel ("Name: " + name); 
    westPanel2.add (nameLabel); 
    JLabel ageLabel = new JLabel ("Age: " + age); 
    westPanel2.add (ageLabel); 
    JLabel incomeLabel = new JLabel ("Yearly Income: " + income); 
    westPanel2.add (incomeLabel); 
    frame2.getContentPane().add (westPanel2, BorderLayout.WEST); 

    JPanel centerPanel2 = new JPanel (new GridLayout (3, 1)); 
    JLabel priceLabel = new JLabel (" Price of property: " + price); 
    centerPanel2.add (priceLabel); 
    JLabel downPayLabel = new JLabel (" Down Payment: " + downPay); 
    centerPanel2.add (downPayLabel); 
    JLabel interestRateLabel = new JLabel (" Interest Rate: " + income); 
    centerPanel2.add (interestRateLabel); 
    frame2.getContentPane().add (centerPanel2, BorderLayout.CENTER); 

    frame2.pack(); 
    frame2.setVisible (true); 

    } 
} 

Répondre

1

Les variables dans votre principale méthode sont des variables locales, donc votre auditeur ne sera pas en mesure de les voir

Il y a beaucoup de façons de résoudre ce problème.Tout d'abord, vous devez faire les variables d'état (name, etc) membres de la classe MortgageCalculator , afin qu'ils soient visibles à d'autres méthodes ou classe es. Ensuite, donnez le code d'écoute à ces variables. Certaines options:

  • Faire Next une classe interne de MortgageCalculator, afin qu'il puisse voir automatiquement les variables membres.
  • Effectuez MortgageCalculator implémentez ActionListener et déplacez la méthode actionPerformed dans la classe résultante. Ensuite, au lieu d'écrire nextButton.addActionListener(new Next());, vous diriez nextButton.addActionListener(this); - mais seulement dans une méthode non statique (donc pas main - vous devrez faire main appeler une méthode non statique sur une instance de MortgageCalculator).