感谢朋友下载的java树型控件,下面是关于树型的简单文档资料 qq:396775219
1 树型的编辑:
1.1树节点的删除
非子叶节点的删除时,会其下所有节点都删除
1.2节点的添加
新节点编号: 如果此节点本身就是子叶节点(即没有子节点)
编号就为节点 新节点编号=节点编号+01
如果此节点非子叶节点时(即有子节点)
新节点编号=节点编号+(max(节点编号)+1)
比如: 某节点下有如下子节点
0101
0102
0104
0108
那么添的节点将是0109
引起上面节点编号的原因主要是:在删除节点时,采用不更改
其他节点算法,这样可以减计算上的复杂度,提高速度
注:系统采用两位为一级方式,所以节点下子节点最多为99个
1.3节点修改
节点修改只能修改节点的,文本、连接地址和描述
不能修改节点的编号,所以节点在修改后,其层次不会发生变化
1.4编码
系统采用utf-8编码
对于添加节点、树型显示节点进,汉字是很好的支持的。
1.5地址栏传汉字参数处理
在修改和删除节点时,显示节点的信息时,出现乱码情况
主要原因是:传信息时,系统采用url将汉字作了参数
在java中,char为两个字节十六位,正好对应简单汉字表,所以在传参时,
将汉字或字符先转化为数字编码串,在前台页面里再将串转化为相应的汉字
比如:
中 20013
a 97
所以 "中a" 就可以转化为 "20013,97" 作为参数值传递
注:本系统里不支持特殊符号,尤其是"," 在添加节点时要特别注意
1.6树型的编辑
并不是完全独立的控件,是结合web系统的,因为数据的编辑操作都会
涉及到客户端与服务器端的数据交互
树型的可编辑设置,只需设置applet参数表里的 isEdit 为yes或no即可(不
区分大小写)
1.7在树型根目录下直接添加子节点
添加的算法和其他子节点相同,但右键弹出菜单只设置"添加"
也就是说,这个树型至少有一个根节点
2树型数据的存放
数据存放在与调用此控件的jsp页面同目录的 .csv文件里(逗号分隔文件)
系统采用按行,顺序读取,生成自定义的树型节点对象存在在内存中
在文件中节点数据是无序的,所以系统在定义节点对象时,实现Comparable
的compareTo()方法,然后将存放节点对象的list,使用Collections.sort(list)
进行排序.
3树型节点对象的定义
属性如下
private String nodeid; //节点的唯一编码
private String superid; //当前节点的父节点编码
private String text; //节点显示文本
private String url; //节点连接地址
private String describ; //节点的描述
private boolean isopen; //节点是否为打开
private int level; //节点的树型中的层次
private int nodeH=15;
private boolean display=false; //节点是否显示
private Image imageShow=null; //节点图标
private Font font=null;
private XYPoint begin=null; //节点开始坐标
private XYPoint point=null; //节点结束点坐标
nodeid,superid 这两个属性的关系定义了节点的父子关系
isopen 的true 或 false表示,此节点是否处于打开的状态 即变换打开与关闭目
录标识符,加、减号变换使用
level 每一个节点在树型中所处在层次,用于计算控件的 水平滚动条,如果层次
的显示起过了一定值时,水平滚动条将会出现或隐蔽
display 节点是否显示,初始状态时,只能根目录显示,其下的所有子节点都不显示
imageShow 节点的显示图标,有文件夹打开、关闭、三角符(被点选时状态)共三种
begin 节点在控件显示,即绘制树型时,每个节点开始坐标
point 节点在控件显示,即绘制树型时,每个节点结束坐标点,为其下的子节点的
开始点做好准备
其他就不详细说明了.一目了然的
4事件
4.1鼠标点击事件
MouseListener, MouseMotionListener
Public void mouseClicked(MouseEvent mouseClick){
If(鼠标右键事件){
或
}
Else if(鼠标左键事件){
//主要是点击连接事件
}
}
4.2鼠标点击事件的监听
采用的坐标范围的捕捉文式
如:
(a,b) 点击事件的坐标
则 if(a>x1&&a<x2&&b>y1&&b>y2)
{
}
4.3滚动条滚动事件
Public Boolean handleEvent(Event event){
if (event.target == scrollbarX) //水平滚动条事件
{
dx=((Integer)event.arg).intValue();
repaint();
}
if (event.target == scrollbarY)//垂直滚动条事件
{
dy=((Integer)event.arg).intValue();
repaint();
}
}
4.4菜单的监听事件
ActionListener
Public void actionPerformed(ActionEvent event){
if (event.getSource()==addItem) {
//添加子节点
}
else if (event.getSource()==delItem) {
//删除当前节点
}
else if (event.getSource()==modItem) {
//修改当前节点
}
}
5文件的读写
5.1 添加节点
因为树型的数据都是存放到文件中的, 所以添加是写文件的过程,是在文件内容后新加入内容,如下创建写对象
BufferedWriter writer = new BufferedWriter(new FileWriter(file,true));
Writer.write(content);
5.2 节点的删除
存入到文件里的数据不像存放在数据库里那样好操作.数据的删除只能在内存里操作
然后将结果全部写入到文件中,同时将先前,文件中的内容全部删除
BufferedWriter writer = new BufferedWriter(new FileWriter(file,false));
Writer.write(content);
5.3 修改节点
操作如上,删除
6参数设置
6.1常规参数
<param name="param1" value="测试参数0">
<param name="charSet" value="GB2312">
<param name="lineColor" value="#4B4B4B">
<param name="bgColor" value="#FFEECC">
<param name="StrColor" value="#000000">
<param name="urlTarget" value="frame2">
<param name="borderColor" value="#CCBB88">
<param name="isEdit" value="yes"> //树型是否可以界面编辑
6.2目录图标
<!-- Images --> //目录图标
<param name="image1" value="closedfolder|../images/iconimages/closedfolder.gif">
<param name="image2" value="openfolder|../images/iconimages/openfolder.gif">
<param name="image3" value="document|../images/iconimages/document.gif">
<param name="image4" value="point|../images/iconimages/point.gif">
<param name="image5" value="root|../images/iconimages/root.gif">
6.4数据文件名称
<!-- Node File -->
<param name="nodeFile" value="menu.csv"> //存放数据文件名称