无法从内部类访问封闭类的JPasswordField对象

时间:2015-06-17 17:51:52

标签: java swing actionlistener actionevent jpasswordfield

我是JApplet的新手。我无法弄清楚如何在方法actionPerformed中从内部类访问JPasswordField对象。我想将一个PasswordField添加到我的JFrame BioReader,然后我想将truePassword与JPasswordField中的输入进行比较。我收到错误,因为“密码无法解析为变量”。

import javax.swing.JFrame;
import javax.swing.JPasswordField;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class BioReader extends JFrame{  
    public BioReader(){
        super("BioTech Inc.");
        setLayout(new FlowLayout());
        JPasswordField Password = new JPasswordField(10);
        add(Password);

        BioReader.theHandler eventHandler = new BioReader.theHandler();
        Password.addActionListener(eventHandler);   
    }
    private class theHandler implements ActionListener {
        public void actionPerformed(ActionEvent event){
            if(event.getSource()==Password)         //error              
                String.format("You typed: %s",event.getActionCommand());
        }//actionPerformed ended
    }//class theHandler ended
}//class BioReader ended

1 个答案:

答案 0 :(得分:1)

首先,变量名不应以大写字母开头。你的一些变量名是正确的,有些则不是。保持一致并遵循Java惯例!

  

。我无法弄清楚如何从内部类

访问JPasswordField对象

您可以访问ActionEvent的源代码,它是生成事件的组件:

JPasswordField passwordField = (JPasswordField)event.getSource();
String text = passwordField.getText();

编辑:

  

我有什么问题?

我没有看视频,所以我不知道该代码是做什么的,但问题在于您将密码字段定义为局部变量,而不是实例变量。

    JPasswordField Password = new JPasswordField(10);

那就是你在构造函数中定义了“password”,所以只有构造函数中的代码才能访问变量。

如果您希望其他方法能够访问该变量,则需要将其定义为该类的实例变量:

public class BioReader extends JFrame{  
    JPasswordField Password = new JPasswordField(10);