Наличие внутренних классов для ваших слушателей делает цель всех этих слушателей очень ясной. Также иногда можно избежать многих проверок if за счет немного большего кодирования.
Если у вас есть панель
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
}
}
Теперь, если у вашего таймера есть проблема, вы можете легко определить класс с проблемой.
Еще важнее то, что в целом он делает ваш код более читабельным. Если кто-то еще хочет поработать над этим классом и ему нужно исправить обработку событий с помощью таймера, ему не нужно искать в ваших if, чтобы найти деталь с логикой таймера.