0

私は JApplet を初めて使用します。メソッド actionPerformed 内の内部クラスから JPasswordField オブジェクトにアクセスする方法がわかりません。JFrame BioReader に PasswordField を追加したいのですが、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
4

1 に答える 1

1

まず第一に、変数名は大文字で始めるべきではありません。変数名には正しいものとそうでないものがあります。一貫性を保ち、Java の規則に従ってください。

.内部クラスから JPasswordField オブジェクトにアクセスする方法がわかりません

イベントを生成したコンポーネントである ActionEvent のソースにアクセスできます。

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

編集:

私の何が問題なのですか?

私はビデオを見ていなかったので、そのコードが何をするのかわかりませんが、あなたの問題は、パスワードフィールドをインスタンス変数ではなくローカル変数として定義したことです。

    JPasswordField Password = new JPasswordField(10);

つまり、コンストラクターで「パスワード」を定義したため、コンストラクター内のコードのみが変数にアクセスできます。

他のメソッドが変数にアクセスできるようにする場合は、クラスのインスタンス変数として定義する必要があります。

public class BioReader extends JFrame{  
    JPasswordField Password = new JPasswordField(10);
于 2015-06-17T18:05:08.947 に答える