stateChanged()中的调用函数

时间:2014-10-13 16:37:50

标签: java listener

我点了A级,按下按钮后:

if (source == buttonA){          
new classB(this);
}

此外,A类具有名为

的功能
function(int a);

在B级我有

public class classB extends JFrame implements ChangeListener {    

    public classB(A a) {
        public void stateChanged(ChangeEvent e){            
           JSlider source = (JSlider)e.getSource();
           tmp = source.getValue();                             
           a.function(tmp);         
        }
    }
}

但是一个无法解决的问题。我怎样才能以其他方式实现这一目标?

1 个答案:

答案 0 :(得分:3)

您应该将classB更改为:

  public class classB extends JFrame implements ChangeListener {
    private A a;

    public classB(A a) {
      this.a = a;
    }

    public void stateChanged(ChangeEvent e) {
      JSlider source = (JSlider)e.getSource();
      int tmp = source.getValue();
      a.function(tmp);
    }
  }

<强>解释

这堂课有些不对劲。首先是构造函数中的嵌套stateChanged函数。这样做意味着classB需要引用类A,这就是为什么它需要一个private A a;字段,并且需要在构造函数中设置。此外,未声明变量tmp,在使用变量之前始终声明变量。

使用它也可以起作用:

int tmp;                    //<-- variable declared, you can now assign a value to it.
tmp = source.getValue();