Files
corejava/corejava第9版/v2ch06/treeRender/ClassNameTreeCellRenderer.java
T
2019-05-22 19:49:35 +08:00

38 lines
1.3 KiB
Java

package treeRender;
import java.awt.*;
import java.lang.reflect.*;
import javax.swing.*;
import javax.swing.tree.*;
/**
* This class renders a class name either in plain or italic. Abstract classes are italic.
*/
public class ClassNameTreeCellRenderer extends DefaultTreeCellRenderer
{
private Font plainFont = null;
private Font italicFont = null;
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,
boolean expanded, boolean leaf, int row, boolean hasFocus)
{
super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
// get the user object
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
Class<?> c = (Class<?>) node.getUserObject();
// the first time, derive italic font from plain font
if (plainFont == null)
{
plainFont = getFont();
// the tree cell renderer is sometimes called with a label that has a null font
if (plainFont != null) italicFont = plainFont.deriveFont(Font.ITALIC);
}
// set font to italic if the class is abstract, plain otherwise
if ((c.getModifiers() & Modifier.ABSTRACT) == 0) setFont(plainFont);
else setFont(italicFont);
return this;
}
}