繁体   English   中英

Java:在一个类中使用Actionlistener来引用另一个类中的变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM