--测试数据 DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10)) INSERT @t SELECT '001',NULL ,'山东省' UNION ALL SELECT '002','001','烟台市' UNION ALL SELECT '004','002','招远市' UNION ALL SELECT '003','001','青岛市' UNION ALL SELECT '005',NULL ,'四会市' UNION ALL SELECT '006','005','清远市' UNION ALL SELECT '007','006','小分市'--深度排序显示处理 --生成每个节点的编码累计(相同当单编号法的编码) DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000)) DECLARE @Level int SET @Level=0 INSERT @t_Level SELECT ID,@Level,ID FROM @t WHERE PID IS NULL WHILE @@ROWCOUNT>0 BEGIN SET @Level=@Level+1 INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID FROM @t a,@t_Level b WHERE a.PID=b.ID AND b.Level=@Level-1 END--显示结果 SELECT SPACE(b.Level*2)+'|--'+a.Name FROM @t a,@t_Level b WHERE a.ID=b.ID ORDER BY b.Sort /*--结果 |--山东省 |--烟台市 |--招远市 |--青岛市 |--四会市 |--清远市 |--小分市 --*/LZ可以试下用SQL直接写出来
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.tree.*;
import java.awt.event.*;
public class test7 extends JFrame {
JButton bt=new JButton("Change");
JTree tree;
DefaultTreeModel model;
MyTreeNode node;
Object[][] obj={{"root","D"},{"root","A"},{"root","B"},{"A","A1"},{"B","B1"},
{"B","B2"},{"C","X"}};
Object[][] obj2={{"x","1"},{"1","2"},{"2","3"}};
DoubleVector dv=new DoubleVector(obj,2);
JPanel panel=(JPanel)this.getContentPane();
public test7() {
jbInit();
}
void jbInit(){
Object[][] o=dv.toDoubleArray();
node=new MyTreeNode(o[0][0]);
node.setData(o);
model=new DefaultTreeModel(node);
tree=new JTree(model);
panel.setLayout(new BorderLayout());
panel.add(new JScrollPane(tree),BorderLayout.CENTER);
bt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
node=new MyTreeNode(obj2[0][0]);
node.setData(obj2);
model.setRoot(node);
}
});
panel.add(bt,BorderLayout.SOUTH);
this.setSize(400,300);
this.setVisible(true);
}
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {
e.printStackTrace();
}
test7 test7 = new test7();
}
}
class MyTreeNode extends DefaultMutableTreeNode{
Object[][] obj;
public MyTreeNode(Object o){
super(o);
}
public void setData(Object[][] o){
obj=o;
}
public boolean isLeaf() {
return false;
}
public int getChildCount() {
loadChildren();
return super.getChildCount();
}
protected void loadChildren(){
TreeSet set=new TreeSet();
for(int i=0;i<obj.length;i++){
if(getUserObject().equals(obj[i][0])){
set.add(obj[i][1]);
}
}
for(int i=0;i<set.size();i++){
MyTreeNode mtn=new MyTreeNode(set.toArray()[i]);
mtn.setData(obj);
insert(mtn,i);
}
}
}
class DoubleVector extends Vector{
private Vector data;
public DoubleVector(){
data=new Vector();
}
public DoubleVector(Object[][] obj,int col){
data=new Vector();
for(int i=0;i<obj.length;i++){
Vector v=new Vector();
for(int j=0;j<col;j++){
v.add(obj[i][j]);
}
data.add(v);
}
}
public int getRowCount(){
return data.size();
}
public int getColCount(){
if(!data.isEmpty()){
return ((Vector)data.get(0)).size();
}
else{
return 0;
}
}
public void insertVector(Object v){
data.add(v);
}
public void insertVector(Object v,int row){
data.insertElementAt(v,row);
}
public boolean removeVector(Object v){
return data.remove(v);
}
public Object removeVector(int row){
return data.remove(row);
}
public void set(Object value,int row,int col){
Vector temp=(Vector)data.get(row);
temp.set(col,value);
}
public Object[][] toDoubleArray(){
Object[][] rt=new Object[getRowCount()][getColCount()];
Vector temp;
for(int i=0;i<data.size();i++){
temp=(Vector)data.get(i);
for(int j=0;j<temp.size();j++){
rt[i][j]=temp.get(j);
}
}
return rt;
}
}
而且我的是从数据库中获得数据存到数组当中去的
不太明白
LZ是什么意思?
--测试数据
DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))
INSERT @t SELECT '001',NULL ,'山东省'
UNION ALL SELECT '002','001','烟台市'
UNION ALL SELECT '004','002','招远市'
UNION ALL SELECT '003','001','青岛市'
UNION ALL SELECT '005',NULL ,'四会市'
UNION ALL SELECT '006','005','清远市'
UNION ALL SELECT '007','006','小分市'--深度排序显示处理
--生成每个节点的编码累计(相同当单编号法的编码)
DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
DECLARE @Level int
SET @Level=0
INSERT @t_Level SELECT ID,@Level,ID
FROM @t
WHERE PID IS NULL
WHILE @@ROWCOUNT>0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
FROM @t a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END--显示结果
SELECT SPACE(b.Level*2)+'|--'+a.Name
FROM @t a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort
/*--结果
|--山东省
|--烟台市
|--招远市
|--青岛市
|--四会市
|--清远市
|--小分市
--*/LZ可以试下用SQL直接写出来