/** Constructs a new Sceen with given height & width (in words) and amount of bits per word. */
  public ScreenComponent() {
    setOpaque(true);
    setBackground(Color.white);
    setBorder(BorderFactory.createEtchedBorder());
    Insets borderInsets = getBorder().getBorderInsets(this);
    int borderWidth = borderInsets.left + borderInsets.right;
    int borderHeight = borderInsets.top + borderInsets.bottom;
    setPreferredSize(
        new Dimension(
            Definitions.SCREEN_WIDTH + borderWidth, Definitions.SCREEN_HEIGHT + borderHeight));
    setSize(Definitions.SCREEN_WIDTH + borderWidth, Definitions.SCREEN_HEIGHT + borderHeight);

    data = new short[Definitions.SCREEN_SIZE];
    x = new int[Definitions.SCREEN_SIZE];
    y = new int[Definitions.SCREEN_SIZE];
    x[0] = borderInsets.left;
    y[0] = borderInsets.top;

    // updates pixels indice
    for (int i = 1; i < Definitions.SCREEN_SIZE; i++) {
      x[i] = x[i - 1] + Definitions.BITS_PER_WORD;
      y[i] = y[i - 1];
      if (x[i] == Definitions.SCREEN_WIDTH + borderInsets.left) {
        x[i] = borderInsets.left;
        y[i]++;
      }
    }

    timer = new Timer(STATIC_CLOCK_INTERVALS, this);
    timer.start();
  }
 /** Stops the animation. */
 public void stopAnimation() {
   timer.setDelay(STATIC_CLOCK_INTERVALS);
 }
 /** Starts the animation. */
 public void startAnimation() {
   timer.setDelay(ANIMATION_CLOCK_INTERVALS);
 }