@Override
	public void paintComponent(Graphics g) {
		Graphics2D g2 = (Graphics2D)g;
		Rectangle clip = g2.getClipBounds();
		
		rowRenderer.paintBackground(g, this);
		
		for (int i=0; i<getModel().getRowCount(); i++) {
			Rectangle2D bounds = getRowBounds(i);
			
			if (bounds.intersects(clip)) {
				rowRenderer.paintRow(g, this, i, bounds, false);
			}
		}
			
		for (int i=0; i<model.getTaskCount(); i++) {
			Object task = model.getTaskAt(i);
			Rectangle2D bounds = getTaskBounds(task);
			
			if (bounds.intersects(clip)) {
				taskRenderer.paintTask(g, this, task, bounds, isTaskSelected(task));
			}
		}
		
		if ((linkRenderer != null) && (linkModel != null)) {
			for (int i=0; i<linkModel.getLinkCount(); i++) {
				linkRenderer.paintLink(g, this, linkModel.getLinkAt(i));
			}
		}
	}