0
我正在调试正在使用Hibernate的Java应用程序。 它在主页面有一个JTree,它是动态填充的数据库,需要在显示时进行排序。使用Hibernate技术在JAVA中按字母顺序对Jtree进行排序
我试图做查询语句排序,但它没有工作。 我也使用了JTree的一些属性,如setSort()
函数为了排序JTree元素,但它仍然不能正常工作。
您是否有任何想法如何在显示数据时对此JTree元素进行排序!?
我正在调试正在使用Hibernate的Java应用程序。 它在主页面有一个JTree,它是动态填充的数据库,需要在显示时进行排序。使用Hibernate技术在JAVA中按字母顺序对Jtree进行排序
我试图做查询语句排序,但它没有工作。 我也使用了JTree的一些属性,如setSort()
函数为了排序JTree元素,但它仍然不能正常工作。
您是否有任何想法如何在显示数据时对此JTree元素进行排序!?
通过扩展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);
样本输出
'我试图做查询语句中的排序,但它没有工作。为什么不?发生了什么?如果您从数据库中获取数据,那么排序它似乎很自然,而不是在JTree中。 – geert3