/**
   * Reacts to slider moves.
   *
   * @see ChangeListener#stateChanged(javax.swing.event.ChangeEvent)
   */
  public void stateChanged(ChangeEvent e) {
    if (zSlider == null || tSlider == null || coord == null || state != State.READY) return;
    Coord3D thisCoord = new Coord3D(zSlider.getValue() - 1, tSlider.getValue() - 1);
    if (coord.equals(thisCoord)) return;
    if (!pixelStats.containsKey(thisCoord)) return;

    Object[] nameColour = (Object[]) channelSelection.getSelectedItem();
    String string = (String) nameColour[1];
    if (!nameMap.containsKey(string)) {
      state = State.READY;
      return;
    }
    selectedChannelName = string;
    int channel = nameMap.get(string);
    if (channel == -1) return;
    if (!pixelStats.get(thisCoord).containsKey(channel)) return;

    state = State.ANALYSING;
    populateData(thisCoord, channel);
    repaint();
    if (shape != null) view.selectFigure(shape.getFigure());
    state = State.READY;
  }