public void drawBorders(Graphics2D g, BordersParameters bordersParameters) {
		configureRendered(g, false);

		int verticalNRows = Math.min(bordersParameters.getNRowsPerWindow() - ((config.getShowHeader() ? 1 : 0) + (config.getFooter() != null ? 1 : 0)), bordersParameters.getNProblems());
		int offset = config.getShowHeader() ? (bordersParameters.getRowHeight() + config.getUpperRowBorderHeight()): 0;
		int maxY = bordersParameters.getRowHeight() * verticalNRows + offset;

		g.setColor(config.getRowBorderColor());
		if (bordersParameters.getNColumns() > 1) {
			for(int rowColumns=0; rowColumns < bordersParameters.getNColumns(); rowColumns++) {
				int x = (bordersParameters.getWindowWidth() * rowColumns) / bordersParameters.getNColumns();
				int y = offset;
				g.drawLine(x, y, x, maxY);
			}
		}

		if (bordersParameters.getNProblems() > 0) {
			for(int rowsRow=0; rowsRow < verticalNRows; rowsRow++) {
				int drawY = bordersParameters.getRowHeight() + rowsRow * bordersParameters.getRowHeight();
				if (rowsRow > 0 && config.getShowHeader() == true)
					drawY += config.getUpperRowBorderHeight();
				g.drawLine(0, drawY, bordersParameters.getWindowWidth(), drawY);
			}

		}

		if (config.getFooter() != null) {
			int y = config.getShowHeader() ? config.getUpperRowBorderHeight(): 0;
			y += (bordersParameters.getNRowsPerWindow() - 1) * bordersParameters.getRowHeight();
			g.drawLine(0, y, bordersParameters.getWindowWidth(), y);
		}

		if (config.getShowHeader()) {
			int drawY = bordersParameters.getRowHeight();
			g.fillRect(0, drawY, bordersParameters.getWindowWidth(), config.getUpperRowBorderHeight());
		}

		if (config.getDrawProblemServiceSplitLine()) {
			for(int x : config.getLineScrollSplitter()) {
				g.drawLine(x, offset, x, maxY);
			}
		}

		configureRendered((Graphics2D)g, true);
	}