3

在对我的一个答案的评论回复中,气垫船

不,您的建议确实会使事情变得更糟,因为通过将其用作 ActionListener,您是在建议他将他的 View 也设为控件,这在“玩具”程序以外的任何东西中都不应该这样做。

作为一个新手,我一直在使用“this”,我不清楚为什么如此不鼓励这样做。有人可以解释/详细说明气垫船的答案或给出另一个答案吗?

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

4

1 回答 1

4

这是因为 Swing 遵循MVC模式。如果您将Controllerand委托View给一个班级,那么就会出现问题。另请阅读Single Responsability Principle,一个班级只应该对一件事负责,如果不是,您的班级似乎就像一个God可以做所有事情的班级。

代替

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{

}
于 2013-08-09T15:58:26.660 回答