使用ActionListener(this)是一种不好的做法吗?

3

在我的一个回答的评论中,Hovercraft说:

不,你的建议实际上会使情况变得更糟,因为通过将其用作ActionListener,你建议他将他的View也作为Control,这只应该在“玩具”程序中才能做到。

作为一个新手,我一直在使用“this”,我不清楚为什么这样被反对。有人能解释/阐述Hovercraft的答案或给出另一个答案吗?

Comment-- https://stackoverflow.com/questions/18021509/how-can-i-call-method-with-a-string/18021674#18021674


8
可以将链接指向相关的帖子或评论,而不是用户本身吗?另外,或许你应该先给他留言。 - nanofarad
2
听起来他建议关注点分离,不要让你的类处理超出其职责范围的事情。 - Karthik T
1
啊,抱歉,我以为更多的人也想知道,所以我才问的。 - discipliuned
如果您的应用程序需要向多个组件添加动作监听器,则最终会得到一个大型的if语句链,试图确定事件的来源是哪个组件。另一种选择是使用匿名内部类,并调用另一个更具体的方法(就像您所引用的OP帖子中可能已经完成的那样)。 - sgbj
希望这个链接,Java中的通用MVC模型,能够帮助你理解另一种实现相同功能的方式,并有一个不错的示例 :-) 我原本想将其作为答案,但我认为这会让我的回答变得太长了。 - nIcE cOw
显示剩余4条评论
1个回答

4
由于Swing遵循MVC模式,如果将Controller和View委托给一个类,则会出现问题。同时,了解一下单一职责原则,一个类只应该负责一件事情,否则你的类就像一个无所不能的上帝一样。请点击单一职责原则了解更多信息。
相比之下,
public class MyJFrame extends JFrame implements KeyListener{
     MyJFrame(){
       this.addKeyListener(this); // sounds awful           
     }
}

使用类似以下的内容:

public class MyFrameView {

private JFrame frame;

     MyFrameView(){
       frame = new JFrame();
       frame.addKeyListener(new MyKeyListener());
     }

}

public class MyKeyListener implements KeyListener{

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接