I forgot to say that I already have my 4 textboxes with a scroll. (Found an example in here and modified it a bit for my needs). also I used simples shaders to imitate the greyed out text.
Heres the sketch if helpful:
ArrayList<TextBox> textBoxes = new ArrayList<TextBox>();
float scrollSpeed = 10;
 
void setup()
{
  size(1280, 720, P2D);
  smooth();
  frameRate(20);
  
  String someText = " One\n two\n three\n four\n five\n six\n seven\n eight\n nine\n ten\n";
  String someText2 = " eleven\n twelve\n thirteen\n fourteen\n fivteen\n sixteen\n seventeen\n eighteen\n nineteen\n twenty\n";
 
  
  TextBox textBox1 = new TextBox(20, 0, 200, height);
  textBox1 .setTextCol (color(0,0,0));
  textBox1 .setFont    (createFont("Courier New", 30));
  textBox1 .setMargin  (10, 10);
  textBox1 .text = someText;
  
  TextBox textBox2 = new TextBox(220, 0, 200, height);
  //textBox2 .setEdgeCol (color(0,0,0, 150));
  textBox2 .setTextCol (color(0,0,0));
  textBox2 .setFont    (createFont("Courier New", 30));
  textBox2 .setMargin  (10, 10);
  textBox2 .text = someText2;
  
  TextBox textBox3 = new TextBox(420, 0, 200, height);
  //textBox2 .setEdgeCol (color(0,0,0, 150));
  textBox3 .setTextCol (color(0,0,0));
  textBox3 .setFont    (createFont("Courier New", 30));
  textBox3 .setMargin  (10, 10);
  textBox3 .text = someText2;
  
  TextBox textBox4 = new TextBox(620, 0, 200, height);
  //textBox2 .setEdgeCol (color(0,0,0, 150));
  textBox4 .setTextCol (color(0,0,0));
  textBox4 .setFont    (createFont("Courier New", 30));
  textBox4 .setMargin  (10, 10);
  textBox4 .text = someText2;
  
  textBoxes.add(textBox1);
  textBoxes.add(textBox2);
  textBoxes.add(textBox3);
  textBoxes.add(textBox4);
 
  
}
 
void draw()
{
  background(255);
  for (TextBox textBox : textBoxes)
  {
    textBox.draw();
  }
  gradient(200);
  gradient2(150);
}
 
void mouseWheel(MouseEvent event)
{
  for (TextBox textBox : textBoxes)
  {
    if (textBox.isInside(mouseX, mouseY))
    {
      textBox.scroll(event.getCount()*scrollSpeed/2);
    }
  }
}
void gradient(int transparency) {
  noStroke();
  beginShape(QUADS);
  fill(255,255,255,transparency);
  vertex(0,370);
  vertex(width,370);
  fill(255,255,255,transparency);
  vertex(width,height);
  vertex(0,height);
  endShape();
}
void gradient2(int transparency) {
  noStroke();
  beginShape(QUADS);
  fill(255 ,255,255,transparency);
  vertex(0,0);
  vertex(width,0);
  fill(255,255,255,transparency);
  vertex(width,320);
  vertex(0,320);
  endShape();
}
 
public class TextBox
{
  public  String    text   = "";
  
  private PGraphics buffer   = new PGraphics();
  private PVector   pos      = new PVector();
  private PVector   size     = new PVector();
  private PVector   margin   = new PVector();
  private float     scroll   = 0;
  private color     backCol  = color(255,255,255,0);
  private color     edgeCol  = color(255,255,255,0);
  private color     textCol  = color(0);
  private PFont     font     = new PFont();
  
  public PVector getPos()  {return pos;}
  public PVector getSize() {return size;}
  
  public void setPos      (PVector pos)      {setPos(pos.x, pos.y);}
  public void setPos      (float x, float y) {pos.x = x; pos.y = y;}
  public void setMargin   (PVector margin)   {setMargin(margin.x, margin.y);}
  public void setMargin   (float w, float h) {margin.x = w; margin.y = h;}
  public void scroll      (float scroll)     {this.scroll = max(this.scroll+scroll, -300); this.scroll = min(this.scroll+scroll,+390);}  // Scroll cannot go below 0.
  public void setBackCol  (color c)          {this.backCol = c;}
  public void setEdgeCol  (color c)          {this.edgeCol = c;}
  public void setTextCol  (color c)          {this.textCol = c;}
  public void setFont     (PFont font)       {this.font = font;}
  
  public void draw()
  {
    buffer.beginDraw();
    {
      buffer.clear();
      buffer.background (backCol);
      buffer.stroke     (edgeCol);
      buffer.fill       (backCol);
      buffer.rect       (0, 0, buffer.width-1, buffer.height-1);  // Border.
      buffer.textFont   (font);
      buffer.fill       (textCol);
      buffer.textAlign  (LEFT, CENTER);
      buffer.text       (text, margin.x, margin.y-scroll, buffer.width-margin.x, buffer.height+scroll);
    }
    buffer.endDraw();
  
    image(buffer, pos.x, pos.y); 
  }
  
  public boolean isInside(PVector checkPos) {return isInside(checkPos.x, checkPos.y);}
  public boolean isInside(float checkPosX, float checkPosY)
  {
    boolean inWidth  = checkPosX > pos.x && checkPosX < pos.x+size.x;
    boolean inHeight = checkPosY > pos.y && checkPosY < pos.y+size.y;
    
    return inWidth && inHeight;
  }
  
  public TextBox(PVector size, PVector pos) {this(pos.x, pos.y, size.x, size.y);}
  public TextBox(float x, float y, float w, float h)
  {
    pos.x  = x; pos.y = y; size.x = w; size.y = h;
    buffer = createGraphics(floor(w), floor(h), P2D);
  }
}