我已经创建了一个下面的渲染器,它渲染带有复选框的JTree,我想要添加不同的颜色和图标到不同的节点。我该怎么做呢?请帮帮我。提前谢谢你。
class CheckTreeCellRenderer extends JPanel implements TreeCellRenderer {
private CheckTreeSelectionModel selectionModel;
private TreeCellRenderer delegate;
private TristateCheckBox checkBox = new TristateCheckBox("",null,true);
public static final State NOT_SELECTED = new State();
public static final State SELECTED = new State();
public static final State DONT_CARE = new State();
public CheckTreeCellRenderer(TreeCellRenderer delegate, CheckTreeSelectionModel selectionModel) {
this.delegate = delegate;
this.selectionModel = selectionModel;
setLayout(new BorderLayout());
setOpaque(false);
checkBox.setState(Boolean.TRUE);
revalidate();
checkBox.setOpaque(false);
}
public Component getTreeCellRendererComponent
(JTree tree, Object value, boolean selected, boolean expanded,
boolean leaf, int row, boolean hasFocus) {
Component renderer = delegate.getTreeCellRendererComponent
(tree, value, selected, expanded, leaf, row, hasFocus);
TreePath path = tree.getPathForRow(row);
if(path!=null){
if(selectionModel.isPathSelected(path, true)) {
checkBox.setState(Boolean.TRUE);
}
else {
checkBox.setState
(selectionModel.isPartiallySelected(path) ? null : Boolean.FALSE);
}
}
setBackground(Color.pink);
removeAll();
add(checkBox, BorderLayout.WEST);
add(renderer, BorderLayout.CENTER);
return this;
} }
发布于 2010-02-23 19:56:59
了解TreeCellRenderers的最好地方是从tutorial (在页面底部)。
而不是添加renderer到BorderLayout.CENTER,您可以只添加一个不同的图标,任何你喜欢的颜色。
发布于 2010-02-23 20:03:44
为了使您的setBackground(Color.PINK)具有任何可见的效果,您应该在构造函数中将setOpaque(false)更改为setOpaque(true)。也就是说,我赞同@John的建议,即在Sun教程中阅读有关渲染器的内容。
https://stackoverflow.com/questions/2316685
复制相似问题