SampleTreeCellRendererpublic class SampleTreeCellRenderer extends JLabel implements TreeCellRenderer
Fields Summary |
---|
protected static Font | defaultFontFont used if the string to be displayed isn't a font. | protected static ImageIcon | collapsedIconIcon to use when the item is collapsed. | protected static ImageIcon | expandedIconIcon to use when the item is expanded. | protected static final Color | SelectedBackgroundColorColor to use for the background when selected. | protected boolean | selectedWhether or not the item that was last configured is selected. |
Methods Summary |
---|
public java.awt.Component | getTreeCellRendererComponent(javax.swing.JTree tree, java.lang.Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus)This is messaged from JTree whenever it needs to get the size
of the component or it wants to draw it.
This attempts to set the font based on value, which will be
a TreeNode.
Font font;
String stringValue = tree.convertValueToText(value, selected,
expanded, leaf, row, hasFocus);
/* Set the text. */
setText(stringValue);
/* Tooltips used by the tree. */
setToolTipText(stringValue);
/* Set the image. */
if(expanded)
setIcon(expandedIcon);
else if(!leaf)
setIcon(collapsedIcon);
else
setIcon(null);
/* Set the color and the font based on the SampleData userObject. */
SampleData userObject = (SampleData)((DefaultMutableTreeNode)value)
.getUserObject();
if(hasFocus)
setForeground(Color.cyan);
else
setForeground(userObject.getColor());
if(userObject.getFont() == null)
setFont(defaultFont);
else
setFont(userObject.getFont());
/* Update the selected flag for the next paint. */
this.selected = selected;
return this;
| public void | paint(java.awt.Graphics g)paint is subclassed to draw the background correctly. JLabel
currently does not allow backgrounds other than white, and it
will also fill behind the icon. Something that isn't desirable.
Color bColor;
Icon currentI = getIcon();
if(selected)
bColor = SelectedBackgroundColor;
else if(getParent() != null)
/* Pick background color up from parent (which will come from
the JTree we're contained in). */
bColor = getParent().getBackground();
else
bColor = getBackground();
g.setColor(bColor);
if(currentI != null && getText() != null) {
int offset = (currentI.getIconWidth() + getIconTextGap());
if (getComponentOrientation().isLeftToRight()) {
g.fillRect(offset, 0, getWidth() - 1 - offset,
getHeight() - 1);
}
else {
g.fillRect(0, 0, getWidth() - 1 - offset, getHeight() - 1);
}
}
else
g.fillRect(0, 0, getWidth()-1, getHeight()-1);
super.paint(g);
|
|