2015-05-29 43 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

相关问题