2015-05-29 69 views
0

我正在調試正在使用Hibernate的Java應用程序。 它在主頁面有一個JTree,它是動態填充的數據庫,需要在顯示時進行排序。使用Hibernate技術在JAVA中按字母順序對Jtree進行排序

我試圖做查詢語句排序,但它沒有工作。 我也使用了JTree的一些屬性,如setSort()函數爲了排序JTree元素,但它仍然不能正常工作。

您是否有任何想法如何在顯示數據時對此JTree元素進行排序!?

+0

'我試圖做查詢語句中的排序,但它沒有工作。爲什麼不?發生了什麼?如果您從數據庫中獲取數據,那麼排序它似乎很自然,而不是在JTree中。 – geert3

回答

1

通過擴展DefaultMutableTreeNode創建自己的節點,每當一個新的子被添加到節點排序它

class MyNode extends DefaultMutableTreeNode { 

public MyNode(Object userObject) { 
    super(userObject); 
} 

@Override 
public void add(MutableTreeNode newChild) { 
    super.add(newChild); 
    sort();//add to tree and sort immediately use in case the model is small if large comment it and and call node.sort once you've added all the children 
} 

public void sort() { 
    Collections.sort(children, compare()); 
} 

private Comparator compare() { 
    return new Comparator<DefaultMutableTreeNode>() { 
     @Override 
     public int compare(DefaultMutableTreeNode o1, DefaultMutableTreeNode o2) { 
      return o1.getUserObject().toString().compareTo(o2.getUserObject().toString()); 
     } 

    }; 

} 
} 

例子:在這裏,我添加數據的降序排列,但因爲我們將顯示在升序排序每個節點只要我們增加一個孩子家長

JFrame frame = new JFrame(); 

    //Mock data 
    MyNode root = new MyNode("Root"); 
    for (int i = 5; i > 0; i--) { 
     MyNode parent = new MyNode("Parent" + i); 
     for (int j = 5; j > 0; j--) { 
      parent.add(new MyNode("Child" + j)); 
     } 
     //parent.sort(); do like this if the data model is large and sort(); is commented in add Methods 
     root.add(parent); 
    } 
    //root.sort(); 
    DefaultTreeModel tmodel = new DefaultTreeModel(root); 
    JTree tree = new JTree(tmodel); 

    frame.add(new JScrollPane(tree)); 

    frame.setTitle("Tree Editor Example"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.pack(); 
    frame.setVisible(true); 

樣本輸出

enter image description here

相關問題