/** Binds listeners to the components */
  private void bindListeners() {
    final ActionListener strategyActionListener =
        new ActionListener() {

          @Override
          public void actionPerformed(final ActionEvent e) {
            final boolean isDay = e.getSource().equals(headerPane.getDayButton());
            final boolean isWeek = e.getSource().equals(headerPane.getWeekButton());
            final DisplayStrategy.Type type = isDay ? Type.DAY : isWeek ? Type.WEEK : Type.MONTH;

            if (getDisplayStrategy() != type) setDisplayStrategy(type, getSelectedDay());
          }
        };

    headerPane.getDayButton().addActionListener(strategyActionListener);
    headerPane.getWeekButton().addActionListener(strategyActionListener);
    headerPane.getMonthButton().addActionListener(strategyActionListener);

    headerPane
        .getScrollLeft()
        .addActionListener(
            new ActionListener() {
              @Override
              public void actionPerformed(final ActionEvent e) {
                final DisplayStrategy strategy = contentPane.getStrategy();
                strategy.moveIntervalLeft();
                headerPane
                    .getIntervalLabel()
                    .setText(contentPane.getStrategy().getDisplayInterval());
                final IntervalChangedEvent event =
                    new IntervalChangedEvent(
                        JCalendar.this,
                        strategy.getType(),
                        config.getIntervalStart().getTime(),
                        config.getIntervalEnd().getTime());

                for (final IntervalChangedListener listener : intervalChangedListener) {
                  listener.intervalChanged(event);
                }
              }
            });

    headerPane
        .getScrollRight()
        .addActionListener(
            new ActionListener() {
              @Override
              public void actionPerformed(final ActionEvent e) {
                final DisplayStrategy strategy = contentPane.getStrategy();
                strategy.moveIntervalRight();
                headerPane
                    .getIntervalLabel()
                    .setText(contentPane.getStrategy().getDisplayInterval());
                final IntervalChangedEvent event =
                    new IntervalChangedEvent(
                        JCalendar.this,
                        strategy.getType(),
                        config.getIntervalStart().getTime(),
                        config.getIntervalEnd().getTime());

                for (final IntervalChangedListener listener : intervalChangedListener) {
                  listener.intervalChanged(event);
                }
              }
            });
  }