用jt.setCellRenderer(new CellRenderer());
下面试我做过的一个类,看看吧,很容易mport java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.plaf.ColorUIResource;public class MyCellRenderer extends JPanel implements TreeCellRenderer {
//protected JCheckBox check;
protected TreeLabel label;
ImageIcon icon1 = new ImageIcon(
PcedMainFrame.class.getResource("whitepoint.gif"));
ImageIcon icon2 = new ImageIcon(
PcedMainFrame.class.getResource("blackpoint.gif")); public MyCellRenderer() {
setLayout(null);
add(label = new TreeLabel());
label.setForeground(UIManager.getColor("Tree.textForeground"));
} public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean isSelected, boolean expanded,
boolean leaf, int row, boolean hasFocus) {
String stringValue = tree.convertValueToText(value, isSelected,
expanded, leaf, row, hasFocus);
setEnabled(tree.isEnabled());
label.setFont(tree.getFont());
label.setText(stringValue);
label.setSelected(isSelected);
label.setFocus(hasFocus);
if(isSelected){
label.setIcon(icon2);
}else{
label.setIcon(icon1);
}
return this;
} public Dimension getPreferredSize() {
Dimension d_label = label.getPreferredSize();
return new Dimension(d_label.width, d_label.height);
} public void doLayout() {
Dimension d_label = label.getPreferredSize();
int y_check = 0;
int y_label = 0;
y_label = (d_label.height)/2;
label.setLocation(0,y_label);
label.setBounds(0,0,d_label.width,d_label.height);
} public void setBackground(Color color) {
if (color instanceof ColorUIResource)
color = null;
super.setBackground(color);
} public class TreeLabel extends JLabel {
boolean isSelected;
boolean hasFocus; public TreeLabel() {
} public void setBackground(Color color) {
if(color instanceof ColorUIResource)
color = null;
super.setBackground(color);
} public void paint(Graphics g) {
String str;
if ((str = getText()) != null) {
if (0 < str.length()) {
if (isSelected) {
label.setForeground(Color.white);
g.setColor(Color.BLUE);
} else {
label.setForeground(Color.black);
g.setColor(UIManager.getColor("Tree.textBackground"));
}
Dimension d = getPreferredSize();
int imageOffset = 0;
Icon currentI = getIcon();
if (currentI != null) {
imageOffset = currentI.getIconWidth() + Math.max(0, getIconTextGap() - 1);
}
g.fillRect(imageOffset, 0, d.width -1 - imageOffset, d.height);
if (hasFocus) {
g.setColor(UIManager.getColor("Tree.selectionBorderColor"));
g.drawRect(imageOffset, 0, d.width -1 - imageOffset, d.height -1);
}
}
}
super.paint(g);
} public Dimension getPreferredSize() {
Dimension retDimension = super.getPreferredSize();
if (retDimension != null) {
retDimension = new Dimension(retDimension.width + 3,
retDimension.height);
}
return retDimension;
} public void setSelected(boolean isSelected) {
this.isSelected = isSelected;
} public void setFocus(boolean hasFocus) {
this.hasFocus = hasFocus;
}
}
}
下面试我做过的一个类,看看吧,很容易mport java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.plaf.ColorUIResource;public class MyCellRenderer extends JPanel implements TreeCellRenderer {
//protected JCheckBox check;
protected TreeLabel label;
ImageIcon icon1 = new ImageIcon(
PcedMainFrame.class.getResource("whitepoint.gif"));
ImageIcon icon2 = new ImageIcon(
PcedMainFrame.class.getResource("blackpoint.gif")); public MyCellRenderer() {
setLayout(null);
add(label = new TreeLabel());
label.setForeground(UIManager.getColor("Tree.textForeground"));
} public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean isSelected, boolean expanded,
boolean leaf, int row, boolean hasFocus) {
String stringValue = tree.convertValueToText(value, isSelected,
expanded, leaf, row, hasFocus);
setEnabled(tree.isEnabled());
label.setFont(tree.getFont());
label.setText(stringValue);
label.setSelected(isSelected);
label.setFocus(hasFocus);
if(isSelected){
label.setIcon(icon2);
}else{
label.setIcon(icon1);
}
return this;
} public Dimension getPreferredSize() {
Dimension d_label = label.getPreferredSize();
return new Dimension(d_label.width, d_label.height);
} public void doLayout() {
Dimension d_label = label.getPreferredSize();
int y_check = 0;
int y_label = 0;
y_label = (d_label.height)/2;
label.setLocation(0,y_label);
label.setBounds(0,0,d_label.width,d_label.height);
} public void setBackground(Color color) {
if (color instanceof ColorUIResource)
color = null;
super.setBackground(color);
} public class TreeLabel extends JLabel {
boolean isSelected;
boolean hasFocus; public TreeLabel() {
} public void setBackground(Color color) {
if(color instanceof ColorUIResource)
color = null;
super.setBackground(color);
} public void paint(Graphics g) {
String str;
if ((str = getText()) != null) {
if (0 < str.length()) {
if (isSelected) {
label.setForeground(Color.white);
g.setColor(Color.BLUE);
} else {
label.setForeground(Color.black);
g.setColor(UIManager.getColor("Tree.textBackground"));
}
Dimension d = getPreferredSize();
int imageOffset = 0;
Icon currentI = getIcon();
if (currentI != null) {
imageOffset = currentI.getIconWidth() + Math.max(0, getIconTextGap() - 1);
}
g.fillRect(imageOffset, 0, d.width -1 - imageOffset, d.height);
if (hasFocus) {
g.setColor(UIManager.getColor("Tree.selectionBorderColor"));
g.drawRect(imageOffset, 0, d.width -1 - imageOffset, d.height -1);
}
}
}
super.paint(g);
} public Dimension getPreferredSize() {
Dimension retDimension = super.getPreferredSize();
if (retDimension != null) {
retDimension = new Dimension(retDimension.width + 3,
retDimension.height);
}
return retDimension;
} public void setSelected(boolean isSelected) {
this.isSelected = isSelected;
} public void setFocus(boolean hasFocus) {
this.hasFocus = hasFocus;
}
}
}
this.iconChooser = iconChooser;
}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);
Object obj = ((DefaultMutableTreeNode)value).getUserObject();
Icon icon = iconChooser.getIcon(obj);
if (icon != null)
setIcon(icon);
return this;
}
}interface IconChooser{
public Icon getIcon(Object userObject);
}然后实现IconChooser接口,根据userObject判断,返回Icon,我们在实际应用觉得这是一种最简单的实现方案。