[英]JTree Multiple Node Renderer problem
在以下JTreeBasics.java文件中,BlackBox和WhiteBox節點是否可以具有不同的圖像?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import java.lang.reflect.*;
public class JTreeBasics{
JFrame f;
DefaultMutableTreeNode root,n1,n2,ln1,ln2,ln3,ln4,ln3_1,ln3_2,ln3_1_1,ln3_1_2,ln3_1_2_1;
DefaultTreeModel dtm;
JTree tree;
public JTreeBasics() {
f=new JFrame("JTree Demo");
f.setSize(400, 500) ;
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
root=new DefaultMutableTreeNode("BlackBox");
n1=new DefaultMutableTreeNode("WhiteBox");
root.add(n1);
ln1=new DefaultMutableTreeNode("Item");
n1.add(ln1);
n2=new DefaultMutableTreeNode("BlackBox");
root.add(n2);
ln2=new DefaultMutableTreeNode("Item");
n2.add(ln2);
ln3=new DefaultMutableTreeNode("WhiteBox");
n2.add(ln3);
ln3_1=new DefaultMutableTreeNode("WhiteBox");
ln3_1_1=new DefaultMutableTreeNode("Item");
ln3_1.add(ln3_1_1);
ln3_1_2=new DefaultMutableTreeNode("BlackBox");
ln3_1_2_1=new DefaultMutableTreeNode("Item");
ln3_1_2.add(ln3_1_2_1);
ln3_1.add(ln3_1_2);
ln3.add(ln3_1);
ln3_2=new DefaultMutableTreeNode("Item");
ln3.add(ln3_2);
ln4=new DefaultMutableTreeNode("Item");
n2.add(ln4);
dtm=new DefaultTreeModel(root);
tree=new JTree(dtm);
//most imp. line of this code
installingCustomRenderer() ;
f.add(tree);
f.setVisible(true);
}
private void installingCustomRenderer(){
CustomTreeCellRenderer renderer = new CustomTreeCellRenderer();
tree.setCellRenderer(renderer);
}
public static void main(String[] args){
new JTreeBasics();
}
}
class CustomTreeCellRenderer 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);
plainFont = getFont();
italicFont = plainFont.deriveFont(Font.ITALIC) ;
setFont(italicFont);
return this;
}
}
是的,在getTreeCellRendererComponent
您需要查詢value
並使用適當的圖像調用setIcon()
。
注意:默認實現會查看expanded
和leaf
的值,以在打開,關閉或葉子圖標之間進行選擇。
在渲染器代碼中,將超級調用的返回值轉換為JLabel(因為DefaultTreeCellRenderer 是 JLabel),然后可以根據“值”在其上設置setIcon()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.