问题描述
为您的侦听器提供内部类使所有这些侦听器的目的非常明确。有时也可以避免很多检查,但要花更多的代码。
如果有面板
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即可找到具有计时器逻辑的零件。
解决方法
对于大型项目,有人告诉我,当您拥有扩展JPanels的类时,最佳实践是使用嵌套类来实现侦听器。例如,我可以拥有扩展JPanel的FactoryScreen类,并具有实现所有必要侦听器的嵌套类FactoryScreenBrain。
对于以这种方式封装我的类的特定优点或缺点,我一直无法得到很好的解释,并且直到现在,我始终只有可以扩展JPanel和实现侦听器的类。有人可以为此提供一些指导吗?