Java 访问JTextField文本

Java 访问JTextField文本,java,swing,jtextfield,Java,Swing,Jtextfield,我有一个简单的程序,我试图从textfield访问数据,但我总是得到null或空字段 举个例子 public class income { JButton save = new JButton("save"); public JTextField setIncomeValue() { .. .. JTextField incomeValue = new JTextField(10); return incomeValue; } public void

我有一个简单的程序,我试图从textfield访问数据,但我总是得到null或空字段

举个例子

public class income {   
JButton save = new JButton("save");

  public JTextField setIncomeValue() {
  ..
  ..
    JTextField incomeValue = new JTextField(10);
    return incomeValue;
  }

  public void launch_Ui{
   frame.add(setIncomeValue());
   frame.add(save);
   save.addactionlistener(new saveListener());
  }
}

class saveListener  implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        String test = new income().setIncomeValue().getText();
        System.out.println("savings...  " + test + " value ?");
    }

}

以前有人知道或者偶然遇到过这个挑战吗?

每次调用
setIncomeValue()
都会创建一个新对象,所以每次都会得到
null

JButton save
旁边添加
JTextField
成员,并保留对第一个
setIncomeValue()的引用。


这将起作用,因为
SaveListener
是类
Income
的内部类(请使用大写字母作为类名),因此可以访问其母类的成员。

更新

仔细研究了我的逻辑之后,我终于找到了一个解决方案。
我所做的是在我的savelistener中创建一个作用域

class saveListener implements ActionListener{

JTextField incomeData;

public saveListener(JTextField incomeData) {
    this.incomeData = incomeData;
 }

 @Override
 public void actionPerformed(ActionEvent e) {
 String test = incomeData.getText();
    System.out.println("Input data " + test);
  }
}

希望这将帮助那些需要帮助的人:)

您每次都在setter中创建一个新的文本字段。将此字段设为字段并在构造函数中创建它。。。你也在听众中创造新的“收入”。这也行不通。这个问题表明你对编程相当陌生。如果是这样的话,我强烈建议您学习一些命令行基础教程,以便更好地掌握基础知识,例如在何处创建和使用对象实例。否则,您在UI开发中会遇到很多陷阱和麻烦。如果您对找到的解决方案感到满意,请将其添加为答案并接受,而不是编辑您的问题。“那会帮助别人的。”马修明白了,谢谢。只需要一天,我就可以接受它作为答案。:)谢谢您还可以从问题中删除该部分以使其完整:)
class saveListener implements ActionListener{

JTextField incomeData;

public saveListener(JTextField incomeData) {
    this.incomeData = incomeData;
 }

 @Override
 public void actionPerformed(ActionEvent e) {
 String test = incomeData.getText();
    System.out.println("Input data " + test);
  }
}