使用方法传递参数。 Java的

时间:2010-12-02 18:05:41

标签: java

请问您能解释一下将此类参数传递给addActionListener方法的方法是什么?我知道创建了JButton类型的按钮变量并定义了事件监听器。我不清楚addActionListener参数,即actionPerformed方法定义。我可以在哪里准备这种方法?感谢。

JButton button = new JButton("New button");
button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        System.out.println("Hello");
    }
});

3 个答案:

答案 0 :(得分:7)

这里发生的是addActionListenerimplements ActionListener作为参数的对象。

您正在创建一个anonymous class,用于实现ActionListener接口,并在其中定义actionPerformed接口所需的方法ActionListener

这个匿名类被实例化为一个对象,该对象被传递到addActionListener方法。

答案 1 :(得分:2)

button.addActionListener()上,实现的类称为anonymous inner class。此类仅存在于您的addActionListener()方法中,并且其他任何人都不知道。基本上,您正在创建一个传递给ActionListener的{​​{1}}(即使它是一个接口)。

由于addActionListener()是一个接口,您必须实现ActionListener方法。当您的actionPerformed()发生事件时,JButton中的监听器会通知(通过JButton方法)传递发生的事件actionPerformed()。 来自维基百科的更多(额外)说明:

  

也使用匿名内部类   只有事件处理代码的地方   由一个组件使用,因此   不需要命名参考。

     

这避免了一个庞大的整体   actionPerformed(ActionEvent)   具有多个if-else分支的方法   确定事件的来源。   通常会考虑这种类型的代码   凌乱和内在的阶级变化   被认为是更好的   问候。

这基本上是Observer Pattern(只是额外的奖励答案)。

答案 2 :(得分:0)

要按字面意思回答您的问题,您可以将方法作为参数传递。

Method method = clazz.getMethod("method-name", method-parameter.class);
yourObject.call(method);