请问您能解释一下将此类参数传递给addActionListener
方法的方法是什么?我知道创建了JButton
类型的按钮变量并定义了事件监听器。我不清楚addActionListener
参数,即actionPerformed
方法定义。我可以在哪里准备这种方法?感谢。
JButton button = new JButton("New button");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.out.println("Hello");
}
});
答案 0 :(得分:7)
这里发生的是addActionListener
将implements 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);