天天看點

事件監聽,持有對方應用

假設有一個對象TFFrame,我要在另一個對象中對他的成員進行操作,可以這樣寫:

class MyMonitor implements ActionListener {
    TFFrame ft = null;
    public void MyMonitor(TFFrame ft) {
        this.ft = ft;
    }

    public void actionPerformed(ActionEvent e) {
        int n1 = Integer.parseInt(ft.num1.getText());
        int n2 = Integer.parseInt(ft.num2.getText());
        ft.num3.setText("" + (n1 + n2));
    }
}
           

調試時,程式出錯,發現

public void MyMonitor(TFFrame ft)

中的

void

在實作接口的構造函數中是不能用的,删除後正常

下面是完整代碼:

import java.awt.*;
import java.awt.event.*;

public class TestMath {
    public static void main(String[] args) {
        new TFFrame().launchFrame();
    }
}

class TFFrame extends Frame {
    TextField num1, num2, num3;
    public void launchFrame() {
        num1 = new TextField();
        num2 = new TextField();
        num3 = new TextField();
        Label plus = new Label("+");
        Button equal = new Button("=");
        MyMonitor bf = new MyMonitor(this);
        equal.addActionListener(bf);
        setLayout(new FlowLayout());
        add(num1);
        add(plus);
        add(num2);
        add(equal);
        add(num3);
        pack();
        setVisible(true);
    }
}

class MyMonitor implements ActionListener {
    TFFrame ft = null;
    public MyMonitor(TFFrame ft) {
        this.ft = ft;
    }

    public void actionPerformed(ActionEvent e) {
        int n1 = Integer.parseInt(ft.num1.getText());
        int n2 = Integer.parseInt(ft.num2.getText());
        ft.num3.setText("" + (n1 + n2));
    }
}
           

特别注意,在

class TFFrame extends Frame

對象中聲明的另一個對象

MyMonitor bf = new MyMonitor(this); 用this指向對象自身