在我的代码中,我目前将所有ActionListener作为Anonymous内部类,如下所示:
item.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//code here
}
}
现在,当代码不超过20行时,这对我来说感觉还不错,但是对于超过20行来说它感觉很笨拙。 所以,我可以实现ActionListener并有一个方法
ActionPerformed(ActionEvent ae)
{
if ae.getSource() == item
{
// code here too
}
}
但我无意在其他任何地方重复使用此代码...... 我可以创建另一个类来处理这个,但这并没有真正帮助,因为我仍然希望使用在我的父类中实例化的变量。
我真正想做的是使用这样的语法:
private void btnAction()
{
// do code
{
public static void main(String[] args)
{
btn.addActionListener(btnAction)
}
我觉得这样看起来最好,因为我可以隐藏底部的事件并专注于正在运行的项目的大部分内容。 这有可能实现吗?
答案 0 :(得分:0)
使用Java 8,您可以这样做:
btn.addActionListener(e -> btnAction());
从这里开始阅读有关lambdas的更多信息:http://www.oracle.com/technetwork/articles/java/architect-lambdas-part1-2080972.html
答案 1 :(得分:0)
如果所有按钮都运行相同的代码,您可以定义一个(命名的)内部类来实现ActionListener并运行代码,或者您甚至可以使封闭类成为ActionListener
并将其添加为动作侦听器对于所有按钮,以便其actionPerformed()
运行所有按钮的代码。
另一方面,如果每个按钮需要不同的操作,您可以使用与requestod相同的方法执行不同的操作。如果您需要活动信息,我建议将活动传递给他们:
private void btnActionOK(ActionEvent e) {
// do code
}
private void btnActionBack(ActionEvent e) {
// do code
}
private void btnActionForward(ActionEvent e) {
// do code
}
等
然后你创建了匿名类,但它actionPerformed()
唯一做的就是调用适当的方法。
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btnActionOK(e);
}
});
backButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btnActionBack(e);
}
});
forwardButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btnActionForward(e);
}
});
内部类可以调用封闭类的方法。这样,您可以保持匿名类的简短,并且可以将所有长代码放在封闭类中的自己的方法中。