⑴ 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++){...}還是有點區別的。有問題可以繼續 問。