JTree中怎么使每个叶节点的图标不一样

fengsheng168 2008-01-04 08:07:39
JTree中怎么使每个叶节点的图标不一样,像qq中那样每个人有不同的头像???请给个参考代码谢谢
...全文
283 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengsheng168 2008-01-11
  • 打赏
  • 举报
回复
谢谢各位了,散过分了。。。。。
hanfengthinker 2008-01-10
  • 打赏
  • 举报
回复
顶楼上的
xuzhenqinandy 2008-01-09
  • 打赏
  • 举报
回复
你可以继承这个DefaultTreeCellRenderer类

public class SmsTreeRenderer extends DefaultTreeCellRenderer
{
//这些你要男或女的图片对象
Icon localIcon;

Icon inBoxIcon;

public SmsTreeRenderer(Icon localIcon, Icon inBoxIcon)
{
this.localIcon = localIcon;
this.inBoxIcon = inBoxIcon;
}

public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded,
boolean leaf, int row, boolean hasFocus)
{

super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
if (这里判断是否为男)
{
//加男图片
setIcon(localIcon);
} else {
//加女图片
setIcon(inBoxIcon);
}

return this;
}

}


具体使用:
创建树对象,设置树对象方法smsTree.setCellRenderer(new SmsTreeRenderer(new ImageIcon("男图片"), new ImageIcon("女图片"));
fengsheng168 2008-01-08
  • 打赏
  • 举报
回复
这两天有事没上,谢谢各位的帮助,我想要的是可以象qq一样更改图标,应该怎么做那???比如说男的是个q哥哥头像,女的就是个q妹妹头像,应该怎么实现?每次都定制treeCellRenderer??
fengsheng168 2008-01-05
  • 打赏
  • 举报
回复
看的不是很明白,能不能给个简单的代码,或者注释详细一点,不好意思,刚学,谢谢
hahe7788 2008-01-05
  • 打赏
  • 举报
回复
LZ要的是不是这样............自己看看能否可以用
hahe7788 2008-01-05
  • 打赏
  • 举报
回复
import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;

public class IconAndTipRenderer extends JLabel implements TreeCellRenderer {

Color backColor = new Color(0xFF, 0xCC, 0xFF);
Icon openIcon, closedIcon, leafIcon;
String tipText = "";

public IconAndTipRenderer(Icon open, Icon closed, Icon leaf) {
openIcon = open;
closedIcon = closed;
leafIcon = leaf;
setBackground(backColor);
setForeground(Color.black);
}

public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected,
boolean expanded, boolean leaf,
int row, boolean hasFocus) {
setText(value.toString( ));
if (selected) {
setOpaque(true);
}
else {
setOpaque(false);
}

// Try to find an IconAndTipCarrier version of the current node.
IconAndTipCarrier itc = null;
if (value instanceof DefaultMutableTreeNode) {
Object uo = ((DefaultMutableTreeNode)value).getUserObject( );
if (uo instanceof IconAndTipCarrier) {
itc = (IconAndTipCarrier)uo;
}
}
else if (value instanceof IconAndTipCarrier) {
itc = (IconAndTipCarrier)value;
}
if ((itc != null) && (itc.getIcon( ) != null)) {
// Great! Use itc's values to customize this label.
setIcon(itc.getIcon( ));
tipText = itc.getToolTipText( );
}
else {
// Hmmm, nothing available, so rely on the defaults.
tipText = " ";
if (expanded) {
setIcon(openIcon);
}
else if (leaf) {
setIcon(leafIcon);
}
else {
setIcon(closedIcon);
}
}
return this;
}

// Override the default to send back different strings for folders and leaves.
public String getToolTipText( ) {
return tipText;
}
}
hahe7788 2008-01-05
  • 打赏
  • 举报
回复
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.plaf.*;
import javax.swing.tree.*;

public class TestTree3 extends JFrame {

JTree tree;
DefaultTreeModel treeModel;

public TestTree3( ) {
super("Tree Test Example");
setSize(200, 150);
setDefaultCloseOperation(EXIT_ON_CLOSE);

// Add our own customized tree icons.
UIManager.put("Tree.leafIcon", new ImageIcon("world.gif"));
UIManager.put("Tree.openIcon", new ImageIcon("door.open.gif"));
UIManager.put("Tree.closedIcon", new ImageIcon("door.closed.gif"));
UIManager.put("Tree.expandedIcon", new ImageIcon("unlocked.gif"));
UIManager.put("Tree.collapsedIcon", new ImageIcon("locked.gif"));
}

public void init( ) {
// Build the hierarchy of containers and objects.
String[] schoolyard = {"School", "Playground", "Parking Lot", "Field"};
String[] mainstreet = {"Grocery", "Shoe Shop", "Five & Dime", "Post Office"};
String[] highway = {"Gas Station", "Convenience Store"};
String[] housing = {"Victorian_blue", "Faux Colonial", "Victorian_white"};
String[] housing2 = {"Mission", "Ranch", "Condo"};
Hashtable homeHash = new Hashtable( );
homeHash.put("Residential 1", housing);
homeHash.put("Residential 2", housing2);

Hashtable cityHash = new Hashtable( );
cityHash.put("School grounds", schoolyard);
cityHash.put("Downtown", mainstreet);
cityHash.put("Highway", highway);
cityHash.put("Housing", homeHash);

Hashtable worldHash = new Hashtable( );
worldHash.put("My First VRML World", cityHash);

// Build our tree out of our big hashtable.
tree = new JTree(worldHash);

// Pick an angled line style.
tree.putClientProperty("JTree.lineStyle", "Angled");
getContentPane( ).add(tree, BorderLayout.CENTER);
}

public static void main(String args[]) {
TestTree3 tt = new TestTree3( );
tt.init( );
tt.setVisible(true);
}

}
jackkui 2008-01-05
  • 打赏
  • 举报
回复
TreeCellRenderer 就是用来描述树节点的外观的,你只要把TreeCellRenderer自己定制一下应该将就可以,如何定制,可以参考2楼的朋友的代码。
chengyongyuan1111 2008-01-04
  • 打赏
  • 举报
回复
实现TreeCellRender类应该就可以了。给你几个程序你参考一下。应该可以做出来,加油
// TestTree3.java
// A simple test to see how we can build a tree and customize its icons
//
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.plaf.*;
import javax.swing.tree.*;

public class TestTree3 extends JFrame {

JTree tree;
DefaultTreeModel treeModel;

public TestTree3( ) {
super("Tree Test Example");
setSize(200, 150);
setDefaultCloseOperation(EXIT_ON_CLOSE);

// Add our own customized tree icons.
UIManager.put("Tree.leafIcon", new ImageIcon("world.gif"));
UIManager.put("Tree.openIcon", new ImageIcon("door.open.gif"));
UIManager.put("Tree.closedIcon", new ImageIcon("door.closed.gif"));
UIManager.put("Tree.expandedIcon", new ImageIcon("unlocked.gif"));
UIManager.put("Tree.collapsedIcon", new ImageIcon("locked.gif"));
}

public void init( ) {
// Build the hierarchy of containers and objects.
String[] schoolyard = {"School", "Playground", "Parking Lot", "Field"};
String[] mainstreet = {"Grocery", "Shoe Shop", "Five & Dime", "Post Office"};
String[] highway = {"Gas Station", "Convenience Store"};
String[] housing = {"Victorian_blue", "Faux Colonial", "Victorian_white"};
String[] housing2 = {"Mission", "Ranch", "Condo"};
Hashtable homeHash = new Hashtable( );
homeHash.put("Residential 1", housing);
homeHash.put("Residential 2", housing2);

Hashtable cityHash = new Hashtable( );
cityHash.put("School grounds", schoolyard);
cityHash.put("Downtown", mainstreet);
cityHash.put("Highway", highway);
cityHash.put("Housing", homeHash);

Hashtable worldHash = new Hashtable( );
worldHash.put("My First VRML World", cityHash);

// Build our tree out of our big hashtable.
tree = new JTree(worldHash);

// Pick an angled line style.
tree.putClientProperty("JTree.lineStyle", "Angled");
getContentPane( ).add(tree, BorderLayout.CENTER);
}

public static void main(String args[]) {
TestTree3 tt = new TestTree3( );
tt.init( );
tt.setVisible(true);
}

}

// IconAndTipRenderer.java
// A renderer for our XML cells
//
import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;

public class IconAndTipRenderer extends JLabel implements TreeCellRenderer {

Color backColor = new Color(0xFF, 0xCC, 0xFF);
Icon openIcon, closedIcon, leafIcon;
String tipText = "";

public IconAndTipRenderer(Icon open, Icon closed, Icon leaf) {
openIcon = open;
closedIcon = closed;
leafIcon = leaf;
setBackground(backColor);
setForeground(Color.black);
}

public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected,
boolean expanded, boolean leaf,
int row, boolean hasFocus) {
setText(value.toString( ));
if (selected) {
setOpaque(true);
}
else {
setOpaque(false);
}

// Try to find an IconAndTipCarrier version of the current node.
IconAndTipCarrier itc = null;
if (value instanceof DefaultMutableTreeNode) {
Object uo = ((DefaultMutableTreeNode)value).getUserObject( );
if (uo instanceof IconAndTipCarrier) {
itc = (IconAndTipCarrier)uo;
}
}
else if (value instanceof IconAndTipCarrier) {
itc = (IconAndTipCarrier)value;
}
if ((itc != null) && (itc.getIcon( ) != null)) {
// Great! Use itc's values to customize this label.
setIcon(itc.getIcon( ));
tipText = itc.getToolTipText( );
}
else {
// Hmmm, nothing available, so rely on the defaults.
tipText = " ";
if (expanded) {
setIcon(openIcon);
}
else if (leaf) {
setIcon(leafIcon);
}
else {
setIcon(closedIcon);
}
}
return this;
}

// Override the default to send back different strings for folders and leaves.
public String getToolTipText( ) {
return tipText;
}
}


希望楼主给我加分哦。我还没有得过分呢,鼓励一下嘛,呵呵

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧