2017-06-06 84 views
0

这是我的两个文件类的代码。为了让变量在动作监听器JFrame中传输和打印,我必须添加/修复哪些内容?错误(我从主类的动作监听中使用的变量)“没有名为‘’字段中键入发现‘下一步’如何从一个类获取变量信息到另一个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); 

} 
} 

的的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); 

    } 
} 

回答

1

在main方法的变量是局部变量,所以你的听众将无法看到他们。

有很多的方法来解决这个问题。首先,你必须使状态变量(name等)成员变量MortgageCalculator类,以便其他方法或类可以看到它们ES。然后,让侦听器代码访问这些变量。一些选项:

  • Next一个内部类的MortgageCalculator,以便它可以自动看到成员变量。
  • 使MortgageCalculator执行ActionListener,并在结果类中移动actionPerformed方法。然后,代替编写nextButton.addActionListener(new Next());,您会说nextButton.addActionListener(this); - 但只能在非静态方法中使用(所以不需要main - 您需要使mainMortgageCalculator的实例上调用非静态方法)。
相关问题