[英]Java:Using an Actionlistener in one class that refrences a variable in another class
我在一个名为Main的类中有一个JTextField和一个按钮。 我在另一个名为Action的类中有一个ActionListener。 我希望ActionListener能够引用JTextField。 我不断收到空指针异常。 我想保持JTextField和ActionListener分开。 我将有许多ActionListeners,这样对我来说组织起来会更容易。
public class Main {
public JTextField text;
public JTextField getText(){
return this.text;
}
public static void main(String[] args) {
Main main=new Main();
main.blah();
}
public void blah(){
JFrame myWindow=new JFrame("ff");
myWindow.setSize(500,500);
myWindow.setVisible(true);
myWindow.setDefaultCloseOperation(3);
text=new JTextField(10);
JLabel lengthL = new JLabel("Enter a number",SwingConstants.CENTER );
JButton button=new JButton("Click button");
myWindow.getContentPane();
myWindow.setLayout(new GridLayout(4,4));
myWindow.add(lengthL);
myWindow.add(text);
myWindow.add(button);
Action hand=new Action();
button.addActionListener(hand);
}
}
public class Action implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
Main main=new Main();
double length=Double.parseDouble(main.text.getText());
System.out.println(length);
}
}
为什么在创建ActionListener时不传递JTextField,如下所示:
public class Action implements ActionListener{
private JTextField text;
public Action(JTextField text) {
this.text = text;
}
@Override
public void actionPerformed(ActionEvent e) {
double length=Double.parseDouble(text.getText());
System.out.println(length);
}
}
//in Main:
public void blah(){
JFrame myWindow=new JFrame("ff");
myWindow.setSize(500,500);
myWindow.setVisible(true);
myWindow.setDefaultCloseOperation(3);
text=new JTextField(10);
JLabel lengthL = new JLabel("Enter a number",SwingConstants.CENTER );
JButton button=new JButton("Click button");
myWindow.getContentPane();
myWindow.setLayout(new GridLayout(4,4));
myWindow.add(lengthL);
myWindow.add(text);
myWindow.add(button);
Action hand=new Action(text); //change this line
button.addActionListener(hand);
}
我不断收到空指针异常
这是因为您在处理事件时正在创建一个新的Main
实例:
public void actionPerformed(ActionEvent e) {
Main main=new Main();
...
您最好使该操作具有容器类(Main)的引用以及访问该文本字段值的方法:
Main aMain;
public void actionPerformed(ActionEvent e) {
this.aMain.getText();
....
甚至更好:
public void actionPerformed(ActionEvent e) {
double lenght = this.main.getValue();// returns double
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.