对于大型项目,有人告诉我,当您拥有扩展JPanels的类时,最佳实践是使用嵌套类来实现侦听器。例如,我可以拥有扩展JPanel的FactoryScreen类,并具有实现所有必要侦听器的嵌套类FactoryScreenBrain。
对于以这种方式封装我的类的特定优点或缺点,我一直无法得到很好的解释,并且直到现在,我始终只有可以扩展JPanel和实现侦听器的类。有人可以为此提供一些指导吗?
为您的侦听器提供内部类使所有这些侦听器的目的非常明确。有时也可以避免很多检查,但要花更多的代码。
如果有面板
public class MyPanel extends JPanel implements ActionListener ... button1.addActionListener(this); button2.addActionListener(this); checkbox1.addActionListener(this); timer3.addActionListener(this); public void actionPerformed(ActionEvent e) { if(e.getSource() == button1) else... ... //potentially many elses }
很难确切地了解您的actionPerformed中发生了什么,因为它一次处理了许多不同的事件。有一个小组:
public class MyPanel extends JPanel ... button1.addActionListener(new ButtonListener()); button2.addActionListener(new ButtonListener()); checkbox1.addActionListener(new CheckBoxListener()); timer3.addActionListener(new TimerListener()); private class TimerListener implements ActionListener { public void actionPerformed(ActionEvent e) { //do stuff related only to timers } }
现在,如果您的计时器有问题,您可以轻松地确定有问题的班级。
更重要的是,它使您的代码更具可读性。如果其他人想在此类上工作,而他们需要使用计时器来修复事件处理,则不必搜索您的ifs即可找到具有计时器逻辑的零件。