- 论坛徽章:
- 0
|
源地址:
http://blog.csdn.net/java2000_net/archive/2008/02/17/2100448.aspx
应网友要求,重新书写了代码,请参考使用。旧代码毅然保留,在文章的后半部
此最新代码增加了对下拉列表的输出支持,可以直接使用在里面
同时可以访问父节点和兄弟节点。
![]()
package net.java2000.tools;
![]()
![]()
import java.util.ArrayList;
![]()
import java.util.List;
![]()
![]()
![]()
/** *//**
![]()
* 树状结构的文本显示和下拉框显示。
![]()
* 转载请保留本说明,并注明出处
![]()
* www.java2000.net
![]()
* blog.csdn.net/java2000_net/
![]()
*
![]()
* @version 2008.02.23
![]()
* @author 赵学庆
![]()
*/
![]()
![]()
public class ForumFolder ...{
![]()
// 编号
![]()
private long id;
![]()
![]()
// 标题
![]()
private String title;
![]()
![]()
// 下级列表
![]()
private ListForumFolder> children = new ArrayListForumFolder>();
![]()
![]()
// 上级,顶层为null
![]()
private ForumFolder parent;
![]()
![]()
// 前一个节点
![]()
private ForumFolder prev;
![]()
![]()
// 后一个节点
![]()
private ForumFolder next;
![]()
![]()
// 当前处理的节点
![]()
private ForumFolder current;
![]()
![]()
![]()
/** *//**
![]()
* 默认的构造器
![]()
*/
![]()
![]()
public ForumFolder() ...{
![]()
}
![]()
![]()
![]()
/** *//**
![]()
* 推荐使用的构造器
![]()
*
![]()
* @param id 编号
![]()
* @param title 文本
![]()
*/
![]()
![]()
public ForumFolder(long id, String title) ...{
![]()
this.id = id;
![]()
this.title = title;
![]()
}
![]()
![]()
![]()
/** *//**
![]()
* 增加一个下属。
![]()
* 自动对应上级和兄弟结点
![]()
*
![]()
* @param f 被增加的节点
![]()
*/
![]()
![]()
public void addChild(ForumFolder f) ...{
![]()
children.add(f);
![]()
f.setParent(this);
![]()
![]()
if (current != null) ...{
![]()
current.next = f;
![]()
}
![]()
f.prev = current;
![]()
current = f;
![]()
}
![]()
![]()
![]()
/** *//**
![]()
* 输出为下拉列表的方法
![]()
*
![]()
* @param selectedId 被选中的编号
![]()
* @return 下拉列表的字符串。可以直接放到里面
![]()
*/
![]()
![]()
public String getOption(long selectedId) ...{
![]()
return "" + toStringOption("", "", selectedId);
![]()
}
![]()
![]()
![]()
/** *//**
![]()
* 输出为Text的方法。
![]()
* 应网友建议,更改toString为toStringText方法。
![]()
*
![]()
* @param lftStr 左侧额外的字符串
![]()
* @param append 右侧显示的字符串
![]()
* @return 文本形式的字符串
![]()
*/
![]()
![]()
public String toStringText(String lftStr, String append) ...{
![]()
StringBuilder b = new StringBuilder();
![]()
b.append(append + title);
![]()
b.append(" ");
![]()
![]()
if (children.size() > 0) ...{
![]()
![]()
for (int i = 0; i children.size() - 1; i++) ...{
![]()
b.append(lftStr + children.get(i).toStringText(lftStr + "│", "├"));
![]()
}
![]()
b.append(lftStr + children.get(children.size() - 1).toStringText(lftStr + " ", "└"));
![]()
}
![]()
return b.toString();
![]()
}
![]()
![]()
![]()
public static void main(String[] args) ...{
![]()
ForumFolder root = new ForumFolder(0, "菜单列表");
![]()
ForumFolder f1 = new ForumFolder(1, "开始菜单");
![]()
root.addChild(f1);
![]()
ForumFolder f1_1 = new ForumFolder(11, "程序");
![]()
f1.addChild(f1_1);
![]()
ForumFolder f1_1_1 = new ForumFolder(111, "附件");
![]()
f1_1.addChild(f1_1_1);
![]()
ForumFolder f1_1_1_1 = new ForumFolder(1111, "娱乐");
![]()
f1_1_1.addChild(f1_1_1_1);
![]()
ForumFolder f1_1_1_2 = new ForumFolder(1112, "娱乐2");
![]()
f1_1_1.addChild(f1_1_1_2);
![]()
ForumFolder f1_2 = new ForumFolder(12, "辅助工具");
![]()
f1.addChild(f1_2);
![]()
ForumFolder f2 = new ForumFolder(2, "My Documents ");
![]()
root.addChild(f2);
![]()
ForumFolder f3 = new ForumFolder(3, "My Documents2 ");
![]()
root.addChild(f3);
![]()
System.out.println(root.toStringText(" ", ""));
![]()
System.out.println(root.getOption(111));
![]()
System.out.println(f1_1_1_2.getPrev().getTitle());
![]()
System.out.println(f1_1_1_2.getPrev().getParent().getTitle());
![]()
}
![]()
![]()
![]()
public ListForumFolder> getChildren() ...{
![]()
return children;
![]()
}
![]()
![]()
![]()
public long getId() ...{
![]()
return id;
![]()
}
![]()
![]()
![]()
/** *//**
![]()
* 得到下一个兄弟结点。
![]()
*
![]()
* @return 如果是最后一个,则返回null
![]()
*/
![]()
![]()
public ForumFolder getNext() ...{
![]()
return next;
![]()
}
![]()
![]()
![]()
public ForumFolder getParent() ...{
![]()
return parent;
![]()
}
![]()
![]()
![]()
/** *//**
![]()
* 得到前一个兄弟结点。
![]()
*
![]()
* @return 如果是第一个,则返回null
![]()
*/
![]()
![]()
public ForumFolder getPrev() ...{
![]()
return prev;
![]()
}
![]()
![]()
![]()
public String getTitle() ...{
![]()
return title;
![]()
}
![]()
![]()
![]()
public void setId(long id) ...{
![]()
this.id = id;
![]()
}
![]()
![]()
![]()
public void setNext(ForumFolder next) ...{
![]()
this.next = next;
![]()
}
![]()
![]()
![]()
public void setParent(ForumFolder parent) ...{
![]()
this.parent = parent;
![]()
}
![]()
![]()
![]()
public void setPrev(ForumFolder prev) ...{
![]()
this.prev = prev;
![]()
}
![]()
![]()
![]()
public void setTitle(String title) ...{
![]()
this.title = title;
![]()
}
![]()
![]()
![]()
/** *//**
![]()
* 构造下拉列表.
![]()
*
![]()
* @param lftStr 左侧的字符
![]()
* @param append 增加的字符
![]()
* @param idSelected 被选中的编号
![]()
* @return 下拉列表字符串
![]()
*/
![]()
![]()
private String toStringOption(String lftStr, String append, long idSelected) ...{
![]()
StringBuilder b = new StringBuilder();
![]()
b.append(append + title + "");
![]()
b.append(" ");
![]()
![]()
if (children.size() > 0) ...{
![]()
![]()
for (int i = 0; i children.size() - 1; i++) ...{
![]()
b.append("" + children.get(i).getId() + "'" + (idSelected == children.get(i).getId() ? " selected" : "")
![]()
+ ">" + lftStr + children.get(i).toStringOption(lftStr + "│", "├", idSelected));
![]()
}
![]()
b.append("" + children.get(children.size() - 1).getId() + "'"
![]()
+ (idSelected == children.get(children.size() - 1).getId() ? " selected" : "") + ">" + lftStr
![]()
+ children.get(children.size() - 1).toStringOption(lftStr + " ", "└", idSelected));
![]()
}
![]()
return b.toString();
![]()
}
![]()
}
运行结果如下:
菜单列表
├开始菜单
│├程序
││└附件
││ ├娱乐
││ └娱乐2
│└辅助工具
├My Documents
└My Documents2
菜单列表
├开始菜单
│├程序
││└附件
││ ├娱乐
││ └娱乐2
│└辅助工具
├My Documents
└My Documents2
娱乐
附件
原文出处:
http://www.java2000.net/viewthread.jsp?tid=944
--------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------- 以下为老版本的代码,仅供参考 -------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
代码如下,可根据需求衍生出各种格式的输出和使用
![]()
package test;
![]()
![]()
import java.util.ArrayList;
![]()
import java.util.List;
![]()
![]()
![]()
public class Folder ...{
![]()
![]()
public Folder(String title) ...{
![]()
this.title = title;
![]()
}
![]()
![]()
private String title;
![]()
![]()
private ListFolder> children = new ArrayListFolder>();
![]()
![]()
![]()
public void addChild(Folder f) ...{
![]()
children.add(f);
![]()
}
![]()
![]()
![]()
public ListFolder> getChildren() ...{
![]()
return children;
![]()
}
![]()
![]()
![]()
public void setChildren(ListFolder> children) ...{
![]()
this.children = children;
![]()
}
![]()
![]()
![]()
public String getTitle() ...{
![]()
return title;
![]()
}
![]()
![]()
![]()
public void setTitle(String title) ...{
![]()
this.title = title;
![]()
}
![]()
![]()
![]()
public String toString(String lftStr, String append) ...{
![]()
StringBuilder b = new StringBuilder();
![]()
b.append(append + title);
![]()
b.append("\n");
![]()
![]()
if (children.size() > 0) ...{
![]()
![]()
for (int i = 0; i children.size() - 1; i++) ...{
![]()
b.append(lftStr+children.get(i).toString(lftStr + "│", "├"));
![]()
}
![]()
b.append(lftStr + children.get(children.size() - 1).toString(
![]()
lftStr + " ", "└"));
![]()
![]()
}
![]()
return b.toString();
![]()
![]()
}
![]()
![]()
![]()
public static void main(String[] args) ...{
![]()
Folder root = new Folder("菜单列表");
![]()
Folder f1 = new Folder("开始菜单");
![]()
root.addChild(f1);
![]()
Folder f1_1 = new Folder("程序");
![]()
f1.addChild(f1_1);
![]()
Folder f1_1_1 = new Folder("附件");
![]()
f1_1.addChild(f1_1_1);
![]()
Folder f1_1_1_1 = new Folder("娱乐");
![]()
f1_1_1.addChild(f1_1_1_1);
![]()
Folder f1_1_1_2 = new Folder("娱乐2");
![]()
f1_1_1.addChild(f1_1_1_2);
![]()
Folder f1_2 = new Folder("辅助工具");
![]()
f1.addChild(f1_2);
![]()
Folder f2 = new Folder("My Documents ");
![]()
root.addChild(f2);
![]()
Folder f3 = new Folder("My Documents2 ");
![]()
root.addChild(f3);
![]()
![]()
System.out.println(root.toString(" ", ""));
![]()
}
![]()
}
![]()
运行结果如下:
菜单列表
├开始菜单
│├程序
││└附件
││ ├娱乐
││ └娱乐2
│└辅助工具
├My Documents
└My Documents2
应网友要求,增加了JDK 1.4版及以下的程序版本,取消了泛型
![]()
import java.util.ArrayList;
![]()
import java.util.List;
![]()
![]()
![]()
public class Folder ...{
![]()
![]()
public Folder(String title) ...{
![]()
this.title = title;
![]()
}
![]()
![]()
private String title;
![]()
![]()
private List children = new ArrayList();
![]()
![]()
![]()
public void addChild(Folder f) ...{
![]()
children.add(f);
![]()
}
![]()
![]()
![]()
public List getChildren() ...{
![]()
return children;
![]()
}
![]()
![]()
![]()
public void setChildren(List children) ...{
![]()
this.children = children;
![]()
}
![]()
![]()
![]()
public String getTitle() ...{
![]()
return title;
![]()
}
![]()
![]()
![]()
public void setTitle(String title) ...{
![]()
this.title = title;
![]()
}
![]()
![]()
![]()
public String toString(String lftStr, String append) ...{
![]()
StringBuilder b = new StringBuilder();
![]()
b.append(append + title);
![]()
b.append(" ");
![]()
![]()
if (children.size() > 0) ...{
![]()
![]()
for (int i = 0; i children.size() - 1; i++) ...{
![]()
b.append(lftStr + ((Folder) children.get(i)).toString(lftStr + "│", "├"));
![]()
}
![]()
b.append(lftStr + ((Folder) children.get(children.size() - 1)).toString(lftStr + " ", "└"));
![]()
}
![]()
return b.toString();
![]()
}
![]()
![]()
![]()
public static void main(String[] args) ...{
![]()
Folder root = new Folder("菜单列表");
![]()
Folder f1 = new Folder("开始菜单");
![]()
root.addChild(f1);
![]()
Folder f1_1 = new Folder("程序");
![]()
f1.addChild(f1_1);
![]()
Folder f1_1_1 = new Folder("附件");
![]()
f1_1.addChild(f1_1_1);
![]()
Folder f1_1_1_1 = new Folder("娱乐");
![]()
f1_1_1.addChild(f1_1_1_1);
![]()
Folder f1_1_1_2 = new Folder("娱乐2");
![]()
f1_1_1.addChild(f1_1_1_2);
![]()
Folder f1_2 = new Folder("辅助工具");
![]()
f1.addChild(f1_2);
![]()
Folder f2 = new Folder("My Documents ");
![]()
root.addChild(f2);
![]()
Folder f3 = new Folder("My Documents2 ");
![]()
root.addChild(f3);
![]()
System.out.println(root.toString(" ", ""));
![]()
}
![]()
}
![]()
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/54409/showart_482717.html |
|