我有一个简单的程序,我试图从文本字段访问数据,但是我总是得到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 ?");
}
}
有人以前有任何想法或偶然发现过这个挑战吗?
答案 0 :(得分:1)
更新
仔细研究了逻辑之后,我终于找到了解决方案。
我所做的就是在我的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);
}
}
希望这会对有需要的人有所帮助:)
答案 1 :(得分:0)
您每次调用setIncomeValue()
都会创建一个新对象,因此每次都会获得null
。
在您的JTextField
旁边添加一个JButton save
成员,并保留对第一个setIncomeValue()
的引用:
JButton save = ...;
JTextField income = setIncomeValue(); // Created once
...
class SaveListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
String test = income.getText();
...
}
}
之所以可行,是因为SaveListener
是类Income
的内部类(请使用大写字母表示类名),因此可以访问其父类的成员。