Java 如何从一个类到另一个Action Listener类获取变量信息?
这是我的两个文件类的代码。为了在action listener JFrame中传输和打印变量,我必须添加/修复什么?在类型“Next”中发现错误“No field named”(我在主类的action listener中使用的变量) ActionListener: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
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);
}
}