⑴ java用什么存储树形结构的数据啊 尤其是多重树形结构
//将楼上的,稍改一下,添加一个
public class TreeNode {
/**节点主键版**/
private String id;
/**节点名称**/
private String text;    
private Long itemType;  //区别   章节--要点--阶段--问题权
/**子节点**/
private TreeNode[] children;
}
⑵ 请问这个树状图在Java中应该怎么做
打个比方
可以写一个Tree的类
public class Tree extends BaseDomain {private String id;
private String key;
private String icon;
private String title;
private String value;
private String text;
private String code;
private String mtype;
private String type;
/**
* 部门的特殊个别字段
* 1.部门 / 2.岗位 的编码
*/
private String number;
private Double order;
private Double sort;
private String href;
private String component;
private List<Tree<T>> children;
private String parentId;
private boolean hasParent = false;
private boolean hasChildren = false;
private Date createTime;
private Date modifyTime;
public void initChildren(){
this.children = new ArrayList<>();
}
}
在写一个工具类
public class TreeUtil {
protected TreeUtil() {
}
private final static String TOP_NODE_ID = "0";
/**
* 用于构建菜单
*
* @param nodes nodes
* @param <T> <T>
* @return <T> Tree<T>
*/
public static <T> Tree<T> build(List<Tree<T>> nodes) {
if (nodes == null) {
return null;
}
List<Tree<T>> topNodes = new ArrayList<>();
nodes.forEach(node -> {
String pid = node.getParentId();
if (pid == null || TOP_NODE_ID.equals(pid)) {
topNodes.add(node);
return;
}
for (Tree<T> n : nodes) {
String id = n.getId();
if (id != null && id.equals(pid)) {
if (n.getChildren() == null)
n.initChildren();
n.getChildren().add(node);
node.setHasParent(true);
n.setHasChildren(true);
n.setHasParent(true);
return;
}
}
if (topNodes.isEmpty())
topNodes.add(node);
});
Tree<T> root = new Tree<>();
root.setId("0");
root.setParentId("");
root.setHasParent(false);
root.setHasChildren(true);
root.setChildren(topNodes);
root.setText("root");
return root;
}}
写完了这两个在写业务层
一个构建书的方法
private void buildTrees(List> trees, List menus, List ids) {
menus.forEach(menu -> {
ids.add(menu.getId().toString());
Tree tree = new Tree<>();
tree.setId(menu.getId().toString());
tree.setKey(tree.getId());
tree.setParentId(menu.getParentId().toString());
tree.setText(menu.getName());
tree.setTitle(tree.getText());
tree.setIcon(menu.getIcon());
tree.setComponent(menu.getComponent());
tree.setCreateTime(menu.getCreateTime());
tree.setCreateTime(menu.getCreateTime());
tree.setHref(menu.getHref());
tree.setSort(menu.getSort());
tree.setCode(menu.getCode());
tree.setMtype(menu.getMtype());
trees.add(tree);
});
}Map<String, Object> result = new HashMap<>();
List<Dept> depts = findDepts(dept, request);
List<Tree<Dept>> trees = new ArrayList<>();
buildTrees(trees, depts);
Tree<Dept> deptTree = TreeUtil.build(trees);
result.put("rows", deptTree);
result.put("total", depts.size());
⑶ 怎样利用java在页面实现树形结构图
你针对这个表写个实体类,写出它的,然后取出所有数据放到List,把list放到request.setAttribute("all");在请求到的页专面中用属getAttribute取出,然后用js写DOM模型表示出来,js中的引用可以直接使用java的数据,例如:<%
List l = (List)request.getAttribute("all");
for(int i==0;i<l.size();i++){
实体类 a = ( 实体类)l.get(i);
%>
var url = <%=a.get属性()%>
<%
}
%>
DOM模型可以使js更好的控制我们想要实现的效果
⑷ java 如何在JFrame中画出树状图
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.tree.*; 
public class TreeEditTest { 
public static void main(String[] args) { 
JFrame frame = new TreeEditFrame(); 
frame.show(); 
} 
} 
class TreeEditFrame extends JFrame implements ActionListener { 
public TreeEditFrame() { 
setTitle("TreeEditTest"); 
setSize(300, 200); 
addWindowListener(new WindowAdapter() { 
public void windowClosing(WindowEvent e) { 
System.exit(0); 
} 
}); 
// construct tree 
TreeNode root = makeSampleTree(); 
model = new DefaultTreeModel(root); 
tree = new JTree(model); 
DefaultTreeCellRenderer renderer=new DefaultTreeCellRenderer(); 
renderer.setLeafIcon(new ImageIcon("1.gif")); 
renderer.setClosedIcon(new ImageIcon("2.gif")); 
renderer.setOpenIcon(new ImageIcon("3.gif")); 
//renderer.(Color.BLUE); 
//renderer.setBackgroundSelectionColor(Color.RED); 
renderer.setBorderSelectionColor(Color.RED); 
tree.setCellRenderer(renderer); 
// add scroll pane with tree to content pane 
Container contentPane = getContentPane(); 
JScrollPane scrollPane = new JScrollPane(tree); 
contentPane.add(scrollPane, "Center"); 
// make button panel 
JPanel panel = new JPanel(); 
addSiblingButton = new JButton("Add Sibling"); 
addSiblingButton.addActionListener(this); 
panel.add(addSiblingButton); 
addChildButton = new JButton("Add Child"); 
addChildButton.addActionListener(this); 
panel.add(addChildButton); 
deleteButton = new JButton("Delete"); 
deleteButton.addActionListener(this); 
panel.add(deleteButton); 
contentPane.add(panel, "South"); 
} 
public TreeNode makeSampleTree() { 
DefaultMutableTreeNode root = new DefaultMutableTreeNode("World"); 
DefaultMutableTreeNode country = new DefaultMutableTreeNode("USA"); 
root.add(country); 
DefaultMutableTreeNode state = new DefaultMutableTreeNode("California"); 
country.add(state); 
DefaultMutableTreeNode city = new DefaultMutableTreeNode("San Jose"); 
state.add(city); 
city = new DefaultMutableTreeNode("Cupertino"); 
state.add(city); 
state = new DefaultMutableTreeNode("Michigan"); 
country.add(state); 
city = new DefaultMutableTreeNode("Ann Arbor"); 
state.add(city); 
country = new DefaultMutableTreeNode("Germany"); 
root.add(country); 
state = new DefaultMutableTreeNode("Schleswig-Holstein"); 
country.add(state); 
city = new DefaultMutableTreeNode("Kiel"); 
state.add(city); 
return root; 
} 
public void actionPerformed(ActionEvent event) { 
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree 
.getLastSelectedPathComponent(); 
if (selectedNode == null) 
return; 
if (event.getSource().equals(deleteButton)) { 
if (selectedNode.getParent() != null) 
model.removeNodeFromParent(selectedNode); 
// model.removeFromParent(selectedNode); 
return; 
} 
// add new node as sibling or child 
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("New"); 
if (event.getSource().equals(addSiblingButton)) { 
DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selectedNode 
.getParent(); 
if (parent != null) { 
int selectedIndex = parent.getIndex(selectedNode); 
model.insertNodeInto(newNode, parent, selectedIndex + 1); 
} 
} else if (event.getSource().equals(addChildButton)) { 
model.insertNodeInto(newNode, selectedNode, selectedNode 
.getChildCount()); 
} 
// now display new node 
TreeNode[] nodes = model.getPathToRoot(newNode); 
TreePath path = new TreePath(nodes); 
tree.scrollPathToVisible(path); 
} 
private DefaultTreeModel model; 
private JTree tree; 
private JButton addSiblingButton; 
private JButton addChildButton; 
private JButton deleteButton; 
private JButton editButton; 
}
http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/javax/swing/JTree.html
⑸ java怎样解析owl文件树变成树状图
你针对这个表写个实体类,写出它的,然后取出所有数据放到List,把list放到request.setAttribute("all");在请版求到的页面权中用getAttribute取出,然后用js写DOM模型表示出来,js中的引用可以直接使用java的数据,例如:<%
List l = (List)request.getAttribute("all");
for(int i==0;i<l.size();i++){
  实体类 a = ( 实体类)l.get(i);
%>
var url = <%=a.get属性()%>
<%
}
%>
DOM模型可以使js更好的控制我们想要实现的效果
⑹ java如何输出树型图
你是要那种的。。。就是选择一个目录。
然后把下面的所有都列出来,
就可以了吗
import java.io.File;
public class Test {
 
 public static void main(String[] args) {
  
  File file=new File("C:/");
  viewTree(file,index);
 }
 static int index=0;
 private static void viewTree(File file,int index) {
  String space="";
  for(int j=0;j<index;j++){
   space += "  ";
  }
  File [] files= file.listFiles();
  for(int i=0;i<files.length;i++){
   File f=files[i];
   if(f.isDirectory()){
    index++;
    System.out.println(space+"+"+f.getName());
    viewTree(f,index);
    
   }else{
    System.out.println(space+"-"+f.getName());
   }
  }
}
}
⑺ java树状结构图如果控制权限,我是把数据全部存在一张表中,子节点存有父节点的id号,树状图已经出来
我想你这个要实现的所谓的权限应该是,只要用户点击某个节点就查询其是否有该节版点的权限吧?权如果有权限就展示有权限操作的内容,没有就提示没有权限?我不知道我理解的对不对。
或者是另一种情况,就是当前登录的用户有哪些菜单的权限就在树形图中只展示他有权限的菜单。
前者需要通过ajax去数据库判断,当然如果对无刷新要求不高可以直接跳action去数据库判断;后者在输出树状图的时候就把权限判断好,后面就不需要判断了。
⑻ 如何用Java实现树形结构啊
package tree;  
  
import java.util.LinkedList;  
import java.util.List;  
  
/** 
 * 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历 
 *  
 * 参考资料0:数据结构(C语言版)严蔚敏 
 *  
 * 参考资料1:http://..com/question/81938912.html 
 *  
 * 参考资料2:http://cslibrary.stanford.e/110/BinaryTrees.html#java 
 *  
 * @author [email protected] @date: 2011-5-17 
 *  
 */  
public class BinTreeTraverse2 {  
  
    private int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };  
    private static List<Node> nodeList = null;  
  
    /** 
     * 内部类:节点 
     *  
     * @author [email protected] @date: 2011-5-17 
     *  
     */  
    private static class Node {  
        Node leftChild;  
        Node rightChild;  
        int data;  
  
        Node(int newData) {  
            leftChild = null;  
            rightChild = null;  
            data = newData;  
        }  
    }  
  
    public void createBinTree() {  
        nodeList = new LinkedList<Node>();  
        // 将一个数组的值依次转换为Node节点  
        for (int nodeIndex = 0; nodeIndex < array.length; nodeIndex++) {  
            nodeList.add(new Node(array[nodeIndex]));  
        }  
        // 对前lastParentIndex-1个父节点按照父节点与孩子节点的数字关系建立二叉树  
        for (int parentIndex = 0; parentIndex < array.length / 2 - 1; parentIndex++) {  
            // 左孩子  
            nodeList.get(parentIndex).leftChild = nodeList  
                    .get(parentIndex * 2 + 1);  
            // 右孩子  
            nodeList.get(parentIndex).rightChild = nodeList  
                    .get(parentIndex * 2 + 2);  
        }  
        // 最后一个父节点:因为最后一个父节点可能没有右孩子,所以单独拿出来处理  
        int lastParentIndex = array.length / 2 - 1;  
        // 左孩子  
        nodeList.get(lastParentIndex).leftChild = nodeList  
                .get(lastParentIndex * 2 + 1);  
        // 右孩子,如果数组的长度为奇数才建立右孩子  
        if (array.length % 2 == 1) {  
            nodeList.get(lastParentIndex).rightChild = nodeList  
                    .get(lastParentIndex * 2 + 2);  
        }  
    }  
  
    /** 
     * 先序遍历 
     *  
     * 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已 
     *  
     * @param node 
     *            遍历的节点 
     */  
    public static void preOrderTraverse(Node node) {  
        if (node == null)  
            return;  
        System.out.print(node.data + " ");  
        preOrderTraverse(node.leftChild);  
        preOrderTraverse(node.rightChild);  
    }  
  
    /** 
     * 中序遍历 
     *  
     * 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已 
     *  
     * @param node 
     *            遍历的节点 
     */  
    public static void inOrderTraverse(Node node) {  
        if (node == null)  
            return;  
        inOrderTraverse(node.leftChild);  
        System.out.print(node.data + " ");  
        inOrderTraverse(node.rightChild);  
    }  
  
    /** 
     * 后序遍历 
     *  
     * 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已 
     *  
     * @param node 
     *            遍历的节点 
     */  
    public static void postOrderTraverse(Node node) {  
        if (node == null)  
            return;  
        postOrderTraverse(node.leftChild);  
        postOrderTraverse(node.rightChild);  
        System.out.print(node.data + " ");  
    }  
  
    public static void main(String[] args) {  
        BinTreeTraverse2 binTree = new BinTreeTraverse2();  
        binTree.createBinTree();  
        // nodeList中第0个索引处的值即为根节点  
        Node root = nodeList.get(0);  
  
        System.out.println("先序遍历:");  
        preOrderTraverse(root);  
        System.out.println();  
  
        System.out.println("中序遍历:");  
        inOrderTraverse(root);  
        System.out.println();  
  
        System.out.println("后序遍历:");  
        postOrderTraverse(root);  
    }  
  
}
⑼ Java、实现树状菜单,谁能给我小例子
根据ID、父ID来排序的JS树
// 得到接点
     var datas = sFileName.selectNodes("datas/data") ;
     var list = new Array() ;
     var data = new Array() ;
     for( var i = 0   ; i < datas.length ; i++   ){
         if( datas[i].getAttribute( "类型" ) == "文件夹" ){
             list.push( datas[i] ) ;
         } else {
             data.push( datas[i] ) ;
         }
     }
     // 设置初始的父号
     var fatherNo = -1 ;
     // 显示目录
     showTreeList( tree , fatherNo , datas ,list , data , null ,"") ;
     // 改变图片和隐藏显示DIV
     function expand( div , img ){
         if( div.style.display == "block" ){
             div.style.display = "none"   ;
             img.src = "images/pic/skin_NLine/closed.gif" ;
         } else {
             div.style.display = "block" ;
             img.src = "images/pic/skin_NLine/opened.gif" ;
         }
        
     }
// 递归显示树
     function showTreeList( tree , fatherNo , datas   ,list , data , currentNode , listStrblank2 ) {
         // 创建一个DIV
         var treediv   = document.createElement("div");
         var isdisplay = "1" //节点的状态   默认为显示状态
         treediv.id = "treediv" + isdisplay + fatherNo ;
         if( currentNode ){
             tree.innerHTML += listStrblank2 + "<IMG SRC='images/pic/skin_NLine/opened.gif' onclick='expand(" + treediv.id + ",this)'   />" + currentNode.getAttribute( "组名称" ) + "<br>" ;        
         }            
         treediv.style.display = "block";
         document.getElementById("MonitorObject").appendChild( treediv );
  
         // 如果currentNode存在则显示组名称
        
         var l = isChildList( fatherNo , list ) ;
         // 如果有子目录,则在次循环.没有则判断是否有信息
         if( l.length != 0 ){
             listStrblank2 += "  " ;
             for( var j = 0 ; j < l.length ; j++ ){
                 showTreeList( treediv , l[j].getAttribute( "id" ) , datas   ,list , data , l[j] , listStrblank2 ) ;
             }
         }
        
         var d = isChildData( fatherNo , data ) ;
         // 如果有子信息,则在次循环.没有则判断是否有信息
         if(   d.length != 0 ){
             for( var j = 0 ; j < d.length ; j++ ) {
             treediv.innerHTML += listStrblank2 + "<IMG SRC='images/pic/people.png' /><input type='checkbox' name='pName' value='" + d[j].getAttribute( "对象属性" ) + "'>" + "美女"   + "<br> " ;        
             }
         }
     tree.appendChild(treediv) ;
     }
    
     // 判断是否有子文件夹
     function isChildList( fatherNo , lists ){
         // 定义一个保存子目录的对象
         var l = new Array() ;
         // 循环找其子目录
         for( var i = 0 ; i < lists.length ; i++ ) {  
             // 如果父编号和父号相同,则保存
             if( lists[i].getAttribute( "父编号" )   == fatherNo ) {
                 l.push( lists[i] ) ;
         }
         }
         return l ;
     }
    
     // 判断是否有子信息
     function isChildData( fatherNo , datas ){
         var d = new Array() ;
         for( var i = 0   ; i < datas.length ; i++ ) {    
             if( datas[i].getAttribute( "父编号" )   == fatherNo ) {
                 d.push( datas[i] ) ;
                 //alert(datas[i].getAttribute( "对象属性" )) ;
         }
         }
         return d ;
     }
⑽ javaweb里面树形结构(tree)
这个是java中的forEach循环,和
for(inti=0;i<10;i++){...}还是有点区别的。有问题可以继续 问。