用渲染器渲染jtree的棘手问题

dearhit 2008-11-27 10:46:18
我用defaultTreeCellRender来渲染jtree的node显示,jtree的model里存的是ID,需要渲染为它的中文名(中文名和id是对应的,保存在缓存中),但是中文名可以变化. 当jtree显示在jpanel上面,同时在缓存中改变此node的中文名使其长度增加,jtree上就会显示不完全,后面的显示为"....",请问怎么样才能让node显示的中文名实时刷新?多谢多谢
...全文
220 39 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
dearhit 2008-12-22
  • 打赏
  • 举报
回复
结贴了 感谢大家解答
hyfeng_ccle 2008-12-12
  • 打赏
  • 举报
回复
可以贴上代码,让大家共享一下,以便集群思好解决问题。
dearhit 2008-12-12
  • 打赏
  • 举报
回复
34楼 可否说下大概的思路,重写什么地方?3Q
dearhit 2008-12-12
  • 打赏
  • 举报
回复
呵呵 多谢多谢 有空时 贴上来就行
gongfuliang 2008-12-12
  • 打赏
  • 举报
回复
不好意思,这两天没倒出时间,争取晚上把代码给你传上,不过家里的机器太破了
李敏910 2008-12-10
  • 打赏
  • 举报
回复
好像重写可以实现,不过我不会..
dearhit 2008-12-10
  • 打赏
  • 举报
回复
gongfuliang 2008-12-09
  • 打赏
  • 举报
回复
晕,明天给你学个例子吧
dearhit 2008-12-09
  • 打赏
  • 举报
回复
在render里面设置也没用的,label的长度只在初次刷新树时起作用啊
gongfuliang 2008-12-08
  • 打赏
  • 举报
回复
你也没有按照我说的设置Label的PreferredSize啊?!
dearhit 2008-12-08
  • 打赏
  • 举报
回复
刚随便写了个代码, 在下面的jtextdfield输入更多的字符,切换后,树的node就会显示不完全,出现“....”

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JLabel;

import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTree;

import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreeCellRenderer;

public class TreeCellRendererTest {
JTextField lab = new JTextField("1111");

DefaultMutableTreeNode root, client;

public TreeCellRendererTest() {
// 树
root = new DefaultMutableTreeNode("资源管理器");
client = new DefaultMutableTreeNode("111");
root.add(client);
JTree tree = new JTree(root);
tree.setCellRenderer(new TestRenderer());
JScrollPane sp = new JScrollPane(tree);
JFrame f = new JFrame();
f.getContentPane().add(sp, BorderLayout.CENTER);
f.getContentPane().add(lab, BorderLayout.SOUTH);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(800, 300);
f.setLocationRelativeTo(null);
f.show();
// TODO Auto-generated constructor stub
}

public static void main(String[] args) {
new TreeCellRendererTest();
}

public String getTextString() {
return lab.getText();
}

private class TestRenderer extends DefaultTreeCellRenderer implements
TreeCellRenderer {

Dimension dim = new Dimension();

JLabel l = new JLabel();

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

JLabel label=new JLabel();


String s=lab.getText();

label.setText(s);

return label;



}
}
}
gongfuliang 2008-12-07
  • 打赏
  • 举报
回复
把你的代码给我,给你看看吧。

都说得挺清楚了啊
dearhit 2008-12-07
  • 打赏
  • 举报
回复
明天我把代码贴出来 先多谢大家热情回答
dearhit 2008-12-06
  • 打赏
  • 举报
回复
setPreferredSize只在第一次加载jtree的时候起作用,在jtree已经加载显示在界面上之后,如果某个node要显示的中文名发生变化,这个label的长度不会自动变化,所以如果中文名长度增加就会显示“....”
shanhai789 2008-12-06
  • 打赏
  • 举报
回复
在renderer中竟然你能实时接受到数据,就应该可以实时改变label的长度,就用上面提到的setPreferredSize(new Dimension(x,y)),只是要计算你需要的长度罢了.另外,如果你要实是更新,那么你就要reload()了,或者repaint().
noenoughmemory 2008-12-06
  • 打赏
  • 举报
回复
ding
qap22 2008-12-06
  • 打赏
  • 举报
回复
ding
noenoughmemory 2008-12-06
  • 打赏
  • 举报
回复
mark
qap22 2008-12-06
  • 打赏
  • 举报
回复
mark
jsnjfzm 2008-12-06
  • 打赏
  • 举报
回复
不懂,帮顶
加载更多回复(19)

62,635

社区成员

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

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