public void paintComponent(Graphics g)
		{
			// clear background
			g.setColor(getBackground());
			g.fillRect(0, 0, getWidth(), getHeight());

			// current executing program line highlight
			SourceCodeLine.SIBLINGSTATUS status = lineObj.isSibling(currentIndex);

			if (status != SourceCodeLine.SIBLINGSTATUS.NONE) {
				g.setColor(CURRENT_LINE_COLOR);
				g.fillRect(3, 0, getWidth()-6, getHeight());
			}

			switch (status) {
				case FIRST:
					g.setColor(SIBLING_LINE_COLOR);
					g.fillRect(4, 1, getWidth()-8, getHeight()-1);
					break;
				case MIDDLE:
					g.setColor(SIBLING_LINE_COLOR);
					g.fillRect(4, 0, getWidth()-8, getHeight());
					break;
				case LAST:
					g.setColor(SIBLING_LINE_COLOR);
					g.fillRect(4, 0, getWidth()-8, getHeight()-1);
					break;
			}

			g.setColor(getForeground());

			int xOffset = 6;

			// breakpoint
			switch (lineObj.getBreakPoint())
			{
				case TRUE:
					g.drawImage(breakPointSetIcon.getImage(), xOffset, iconOffset, null);
					break;
				case FALSE:
					g.drawImage(breakPointUnsetIcon.getImage(), xOffset, iconOffset, null);
					break;
			}

			xOffset = BREAKPOINT_AREA_WIDTH;

			// opcode
			if (lineObj.getOpCode() != null)
				g.drawString(lineObj.getOpCode(), xOffset, this.baseline);

			// instruction
			if (lineObj.getInstruction() != null)
			{
				xOffset = (int) Math.max(INSTRUCTION_OFFSET, INSTRUCTION_OFFSET_PERCENT * getWidth());

				g.drawString(lineObj.getInstruction(), xOffset, this.baseline);
			}

			// source line
			if (lineObj.getSourceCodeLine() != null)
			{
				xOffset = (int) Math.max(SOURCECODE_OFFSET, SOURCECODE_OFFSET_PERCENT * getWidth());

				g.drawString(lineObj.getSourceCodeLine(), xOffset, this.baseline);
			}
		}