Component (JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { TodoItemNode node = (TodoItemNode)((DefaultMutableTreeNode)value).getUserObject(); String text = value.toString(); int parenPos = text.indexOf(')'); int contentStartPos = (parenPos >= 0 && parenPos < (text.length() - 1)) ? parenPos + 2 : 0; myPrefixRenderer.getTreeCellRendererComponent(tree, text.substring(0, contentStartPos), selected, expanded, leaf, row, hasFocus); myPrefixRenderer.setIcon(node.getIcon()); List<HighlightedRegionProvider> additionalLines = node.getAdditionalLines(); for (int i = 0; i < MAX_DISPLAYED_LINES; i++) { if (i > additionalLines.size()) { myLineRenderers[i].setVisible(false); } else { myLineRenderers[i].setVisible(true); myLineRenderers[i].getTreeCellRendererComponent(tree, i == 0 ? text.substring(contentStartPos) : additionalLines.get(i - 1), selected, expanded, leaf, row, hasFocus); HighlightedRegionProvider provider = i == 0 ? node : additionalLines.get(i - 1); for (HighlightedRegion region : provider.getHighlightedRegions()) { myLineRenderers[i].addHighlighter(region.startOffset - (i == 0 ? contentStartPos : 0), region.endOffset - (i == 0 ? contentStartPos : 0), region.textAttributes); } } } myMoreLabel.setVisible(additionalLines.size() >= MAX_DISPLAYED_LINES); return this; }