@Override
	protected void paintComponent(Graphics gc) {
		super.paintComponent(GraphicsUtilities.prepare(gc));
		Rectangle clip = gc.getClipBounds();
		Insets insets = getInsets();
		int height = getHeight();
		Rectangle bounds = new Rectangle(insets.left, insets.top, getWidth() - (insets.left + insets.right), height - (insets.top + insets.bottom));
		boolean drawDividers = mOwner.shouldDrawColumnDividers();
		gc.setColor(getTopDividerColor());
		gc.drawLine(clip.x, height - 1, clip.x + clip.width, height - 1);
		Color dividerColor = mOwner.getDividerColor();
		for (Column col : mOwner.getModel().getColumns()) {
			if (col.isVisible()) {
				bounds.width = col.getWidth();
				if (clip.intersects(bounds)) {
					boolean dragging = mOwner.getSourceDragColumn() == col;
					Composite savedComposite = null;
					if (dragging) {
						savedComposite = ((Graphics2D) gc).getComposite();
						((Graphics2D) gc).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
					}
					col.drawHeaderCell(mOwner, gc, bounds);
					if (dragging) {
						((Graphics2D) gc).setComposite(savedComposite);
					}
				}
				bounds.x += bounds.width;
				if (drawDividers) {
					gc.setColor(dividerColor);
					gc.drawLine(bounds.x, bounds.y, bounds.x, bounds.y + bounds.height);
					bounds.x++;
				}
			}
		}
	}