2017-06-06 83 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的實例上調用非靜態方法)。
相關問題