0

ですから、私は同様の質問がすでに答えられていることを知っていますが、私のものはもう少し具体的です。入力した2つの単語を比較し、それらが一致するかどうかを通知する簡単なプログラムを作成しています。コードは次のとおりです。

import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;

public class Password {
JPanel windowContent, p1, p2, p3; //p1 is in the west, p2 in center and p3 in south
JButton check, clear;
JTextField pass1, pass2;
JLabel word1, word2, result;
JFrame frame;


Password() {
    windowContent = new JPanel();
    BorderLayout bl = new BorderLayout();
    windowContent.setLayout(bl);

    p1 = new JPanel();
    GridLayout gl = new GridLayout(2, 1);
    p1.setLayout(gl);

    word1 = new JLabel("1st word: ");
    word2 = new JLabel ("2nd word: ");

    p1.add(word1);
    p1.add(word2);

    windowContent.add("West", p1);

    p2 = new JPanel();
    p2.setLayout(gl);

    pass1 = new JTextField (20);
    pass2 = new JTextField (20);

    p2.add(pass1);
    p2.add(pass2);

    windowContent.add("Center", p2);

    p3  = new JPanel();
    FlowLayout fl = new FlowLayout();
    p3.setLayout(fl);

    check = new JButton("Check");
    clear = new JButton("Clear");
    result = new JLabel("");

    p3.add(check);
    p3.add(result);
    p3.add(clear);

    windowContent.add("South", p3);

    frame = new JFrame("Password");
    frame.add(windowContent);
    frame.pack();
    frame.setVisible(true);

    PasswordEngine engine = new PasswordEngine(this); // <--- THIS LINE HERE!

    check.addActionListener(engine);
    clear.addActionListener(engine);

    }

    public static void main(String [] args) {
        Password pass = new Password();

    }

}

そして別のクラスでは、プログラムロジック:

import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class PasswordEngine implements ActionListener {

Password parent;
String textField1, textField2;

PasswordEngine(Password parent) {
    this.parent = parent;
}

public void actionPerformed(ActionEvent e) {
    String displayFieldText1 = parent.pass1.getText();
    String displayFieldText2 = parent.pass2.getText();

    Object src  = e.getSource();

    if (src == parent.clear) {
        parent.pass1.setText("");
        parent.pass2.setText("");
        parent.result.setText("");
        parent.pass1.setBackground(Color.white);
        parent.pass2.setBackground(Color.white);
    } else  if (displayFieldText1.equals(displayFieldText2)) {
        parent.result.setText("MATCH");
        parent.pass1.setBackground(Color.GREEN);
        parent.pass2.setBackground(Color.GREEN);
    } else {
        parent.result.setText("NOT MATCH");
        parent.pass1.setBackground(Color.white);
        parent.pass2.setBackground(Color.white);

    }

}

}

だから、私の質問はすべてクラスについてですPassword、この行で:

PasswordEngine engine = new PasswordEngine(this);

なぜthisパラメータなのですか?その行に実際にパラメータが必要なのはなぜですか?thisなぜそこにある必要があるのか​​わかりません。

PS:私はJavaとプログラミングに不慣れです。

4

1 に答える 1

0

このPasswordEngineクラスには、 type の引数を取る単一のコンストラクターがありますPassword

PasswordEngine(Password parent) {

したがって、あなたが言うときはいつでもnew Password(…)、 … はタイプのオブジェクトに対応しなければなりませんPassword(一般的には 可能性nullがありますが、後で問題が発生する可能性があります)。そして、アクションが適用されるパスワード ウィジェットを記述するためにパラメータが使用されるため、パスワード ウィジェットはthisその引数としてそれ自体 (読み取り) を渡します。このようにして、 はそれを作成したオブジェクトPasswordEngineを認識します。Password

多くのアプリケーションは、このアクションにネストされたクラスを使用することに注意してください。ネストされたクラスは、それを囲むクラスのメンバーにアクセスできるため、明示的な処理はparent必要ありません。

于 2012-07-22T20:01:45.523 に答える