Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从一个类到另一个Action Listener类获取变量信息?_Java_Swing_Actionlistener - Fatal编程技术网

Java 如何从一个类到另一个Action Listener类获取变量信息?

Java 如何从一个类到另一个Action Listener类获取变量信息?,java,swing,actionlistener,Java,Swing,Actionlistener,这是我的两个文件类的代码。为了在action listener JFrame中传输和打印变量,我必须添加/修复什么?在类型“Next”中发现错误“No field named”(我在主类的action listener中使用的变量) ActionListener: import java.awt.*; //for Dimension import javax.swing.*; //for GUI components import java.awt.event.*; //for MessageL

这是我的两个文件类的代码。为了在action listener JFrame中传输和打印变量,我必须添加/修复什么?在类型“Next”中发现错误“No field named”(我在主类的action listener中使用的变量)

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

  }
}

main方法中的变量是局部变量,因此侦听器将无法看到它们

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

  • 使
    Next
    成为
    MortgageCalculator
    的内部类,以便它可以自动查看成员变量
  • 使
    MortgageCalculator
    实现
    ActionListener
    ,并将
    actionPerformed
    方法移动到结果类中。然后,您可以说
    nextButton.addActionListener(new Next());
    ,而不是编写
    nextButton.addActionListener(this);
    ,但只能在非静态方法中(因此不是
    main
    ——您需要对
    MortgageCalculator
    的实例进行
    main
    调用非静态方法)
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);

  }
}