@Override
  public void paintComponent(Graphics g) {
    super.paintComponent(g);

    // draw boxes
    for (int i = 0; i < rows; i++) {
      for (int j = 0; j < cols; j++) {
        if (gridModel[i][j].isFilled()) {
          g.fillRect(gridModel[i][j].x, gridModel[i][j].y, Box.size, Box.size);
        } else {
          g.drawRect(gridModel[i][j].x, gridModel[i][j].y, Box.size, Box.size);
        }
      }
    }

    // fill start
    g.setColor(Color.GREEN);
    g.fillRect(bStart.x, bStart.y, Box.size, Box.size);

    // fill end
    g.setColor(Color.PINK);
    g.fillRect(bEnd.x, bEnd.y, Box.size, Box.size);

    // fill path
    g.setColor(Color.red);
    for (int i = 0; i < path.size(); i++) {
      g.fillRect(path.get(i).x, path.get(i).y, Box.size, Box.size);
    }

    Toolkit.getDefaultToolkit().sync();
  }