@Override
    public void render(Graphics2D g2d, int width, int height) {
	if(borderWidth > 0) {
	    g2d.setColor(new Color(borderColor));
	    if(borderRadius == 0) {
		g2d.fillRect(this.x - borderWidth, this.y - borderWidth, this.width + 2*borderWidth, this.height + 2*borderWidth);
	    }else {
		g2d.fillRoundRect(this.x - borderWidth, this.y - borderWidth, this.width + 2*borderWidth, this.height + 2*borderWidth, borderRadius, borderRadius);
	    }
	}
	Shape clip = g2d.getClip();
	RoundRectangle2D clipRight = new RoundRectangle2D.Float(this.x + this.width - 40 + 5, this.y, 40 - 5, this.height, borderRadius - borderWidth, borderRadius - borderWidth);
	RoundRectangle2D clipMain = new RoundRectangle2D.Float(this.x, this.y, this.width - 40, this.height, borderRadius - borderWidth, borderRadius - borderWidth);
	g2d.setClip(clipRight);
	drawBackground(g2d, width, height);
	g2d.setClip(clipMain);
	drawBackground(g2d, width, height);
	//g2d.fillRect(0, 0, width, height);
	AffineTransform tx = g2d.getTransform();
	totalHeight = 0;
	g2d.translate(this.x, -scroll + this.y);
	for(int i = 0; i < adapter.getLength(this); i++) {
	    adapter.get(i, this).render(g2d, this.width, this.height);
	    int h = adapter.getHeight(i, this);
	    g2d.translate(0, h);
	    totalHeight += h;
	}
	g2d.setTransform(tx);
	if(scroll > totalHeight - this.height) {
	    scroll = totalHeight - this.height;
	    scrollPerc = (float)scroll/(float)totalHeight;
	}
	if(scroll < 0)
	    scroll = 0;
	scrollButtonHeight = totalHeight > this.height ? (int)(((float)this.height/totalHeight)*this.height) : this.height;
	g2d.setClip(clip);
	g2d.setColor(new Color(borderColor));
	g2d.fillRoundRect(this.x + this.width - 40 + 5 + 1, (int) (this.y + scrollPerc*this.height + borderWidth - 3), 40 - 5 - 2, scrollButtonHeight - borderWidth, borderRadius - borderWidth, borderRadius - borderWidth);
    }