最近学习了一下JTree的使用方法:

先来看一下树的实例:

构建一个树,

下面就是添加数据之后,java中默认的样式,

JTree实现QQ好友列表-LMLPHP

然后我们可以来改变数中的节点的图片,以及打开,折叠的样子:

如图:JTree实现QQ好友列表-LMLPHP

然后我们还可以来把前面的连接线给去掉:

如图:

JTree实现QQ好友列表-LMLPHP

其他的一些基本设置:

如图:

JTree实现QQ好友列表-LMLPHP

所以从上面我们可以看出来,JTree的是由TreeNode构成的;

JTree和JList一样,都有一个Model以及TreeCellRenderer渲染器,树用Model模型来管理TreeNode,然后TreeCellRenderer渲染器则是负责Tree的样式。

我们也可以像JList一样通过重写来实现自定义的树。但是这里JTree需要改写的不是Model,而是TreeNode。

JTree,TreeModel,以及TreeNode,以及TreeCellRenderer:

在JTree中,每一个JTree由N个TreeNode构成,而TreeModel管理的是所有的TreeNode。TreeCellRenderer则是负责渲染每一个TreeNode。

TreeNode:在JTree中,可以说是负责数据的存储。在默认的节点DefaultMutableTreeNode中,JTree上显示的数据也就是文字是放的属性userObject(是一个Object对象)中,在上面的例子中我们的userObject存放的就是String型的对象。

TreeMode:是模型,也就是说,他负责把所有的TreeNode给联系起来。通过TreeMode我们可以知道,当前树的总的节点数,以及是否为叶子节点等。

TreeCellRenderer:渲染器,JAVA提供的渲染器,一般是一个JLabel对象,然后实现了TreeCellRenderer接口。根据Model传来的对象,进行包装——把该对象转换为String型然后显示在JLable上面。在TreeCellRenderer渲染器中得到的Value的值是一个TreeNode对象,TreeCellRenderer渲染的是每一个TreeNode。

自定义好友列表:

1.实现TreeNode,在自定义好友列表的TreNode里面,需要显示好友的名字(uName),以及个性签名(text),然后是一个头像(img),然后ID是用来唯一标示该节点,存储的是好友的ID。然后是考虑到数型结构,会有孩子节点(可以有多个孩子所以为一个数组),以及父节点。

2.实现 TreeCellRenderer,这里要注意区分一下好友节点以及根节点,还有好友分组节点的显示是不一样的,需要分别考虑。同时在JLable中的text属性是不能换行的,所以使用了HTML来设置JLable的Text值。

3.然后就是和上面的实例一样去构建一个JTree了。

效果:

JTree实现QQ好友列表-LMLPHP

05-16 04:22