class MyMonitor implements ActionListener {
TFFrame tf = null;//TFFrame是一个继承了Frame的类

public MyMonitor(TFFrame tf) {
this.tf = tf;
}

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

}
}TFFrame不是已经在MyMonitor中声明可一个引用tf了么?也就是说actionPerformed方法不是已经可以直接用了么?为什么还要在MyMonitor的构造方法中写那么一下!谢谢回答!!

解决方案 »

  1.   

     public MyMonitor(TFFrame tf) {
            this.tf = tf;
        }构造这个MyMonitor 从外部传递一个TFFrame 赋给tf引用,lz好好看一下基础啊
      

  2.   

    如果 构造函数 不传入这个 参数 那么 你永远 给 你的  TFFrame tf = null;//TFFrame是一个继承了Frame的类
    永远是null 那你 怎么用啊??当然 你可以 用无 参 构造函数  然后再全局变量 里 赋值也是一样 
    class MyMonitor implements ActionListener {
        TFFrame tf = new TFFrame() ;//TFFrame是一个继承了Frame的类
        
        public MyMonitor() {
           
        }
        
        public void actionPerformed(ActionEvent e) {
            int n1 = Integer.parseInt(tf.num1.getText());
            int n2 = Integer.parseInt(tf.num2.getText());
            tf.num3.setText("" + (n1+n2));
            
        }
    }
      

  3.   

    是已经定义了,但没有赋值。类的属性的初始值,有的时候是固定的这样的话,你可以直接写:
    TFFrame tf = new TFFrame();
    但有的时候需要在new的时候传递参数来指定,比如你给的代码:
    this.tf = tf;//等号右边的tf是参数,在new的时候指定的参数你的代码就属于后者。
    在实际应用中,你的某个窗体要操作它的父窗体上的控件,一般就用你的这种方式。
    在new子窗体的时候,传递一个父窗体的引用进去。这样在子窗体里就可以对父窗体进行操作了。
      

  4.   

    构造这个MyMonitor 从外部传递一个TFFrame 赋给tf引用,也就是一个简单的赋值,与actionPerformed方法并没有什么关系。另外我觉得值段程序很别扭,没有触发ActionListener 事件的,实现ActionListener 有什么用吗,不明白它要实现什么功能
      

  5.   

    的确声明了一个,但是你声明的是null,null是没有任何意义的,如果你用NULL去调用任何的方法会抛出空异常的。所以,你必须将你申明的变量tf进行初始化。public MyMonitor(TFFrame tf) {
            this.tf = tf;
        }
    正是一个初始化的过程!
      

  6.   

    TFFrame tf = null;
    声明了TFFrame类型的变量tf,但是并没有构造一个TFFrame对象,此处是一个空引用。
    楼主要弄清楚引用和对象的区别。构造对象用new TFFrame();
      

  7.   

    就是这样 不然的话 你的tf的值哪里来的  就是public MyMonitor(TFFrame tf) {
            this.tf = tf;
        }
    赋的值的