簡體   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