画一棵简单树的三种方法

画一棵简单树的三种方法

首先我使用SWT中的TreeViewer类画了一棵简单树。
代码如下:

package  net.blogjava.lzqdiy.tree;

import  java.util.List;

import  org.eclipse.jface.viewers.IStructuredContentProvider;
import  org.eclipse.jface.viewers.ITreeContentProvider;
import  org.eclipse.jface.viewers.LabelProvider;
import  org.eclipse.jface.viewers.TreeViewer;
import  org.eclipse.jface.viewers.Viewer;
import  org.eclipse.swt.SWT;
import  org.eclipse.swt.graphics.Image;
import  org.eclipse.swt.widgets.Display;
import  org.eclipse.swt.widgets.Shell;
import  org.eclipse.swt.widgets.Tree;

public   class  TreeTest
{

    
class TreeLabelProvider extends LabelProvider
    
{
        
public String getText(Object element)
        
{
            ITreeEntry entry 
= (ITreeEntry) element;
            
return entry.getName();
        }


        
public Image getImage(Object element)
        
{
            
return null;
        }

    }


    
class TreeContentProvider implements IStructuredContentProvider,
            ITreeContentProvider
    
{
        
public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
        
{
        }


        
public void dispose()
        
{
        }


        
public Object[] getElements(Object inputElement)
        
{
            
if (inputElement instanceof List)
            
{
                List list 
= (List) inputElement;
                
return list.toArray();
            }
 else
                
return new Object[0];
        }


        
public Object[] getChildren(Object parentElement)
        
{
            ITreeEntry entry 
= (ITreeEntry) parentElement;
            List list 
= entry.getChildren();
            
if (list == null || list.isEmpty())
            
{
                
return new Object[0];
            }
 else
                
return list.toArray();
        }


        
public Object getParent(Object element)
        
{
            
return null;
        }


        
public boolean hasChildren(Object element)
        
{
            ITreeEntry entry 
= (ITreeEntry) element;
            List list 
= entry.getChildren();
            
if (list == null || list.isEmpty())
            
{
                
return false;
            }
 else
                
return true;
        }

    }


    
private Tree tree;

    
/** *//**
     * Launch the application
     * 
     * 
@param args
     
*/

    
public static void main(String[] args)
    
{
        
try
        
{
            TreeTest window 
= new TreeTest();
            window.open();
        }
 catch (Exception e)
        
{
            e.printStackTrace();
        }

    }


    
/** *//**
     * Open the window
     
*/

    
public void open()
    
{
        
final Display display = Display.getDefault();
        
final Shell shell = new Shell();
        shell.setSize(
350250);
        shell.setText(
"SWT Application");
        
//

        shell.open();

        
final TreeViewer treeViewer = new TreeViewer(shell, SWT.BORDER);
        treeViewer.setLabelProvider(
new TreeLabelProvider());
        treeViewer.setContentProvider(
new TreeContentProvider());
        Object inputObj 
= DataFactory.createTreeData();
        treeViewer.setInput(inputObj);
        tree 
= treeViewer.getTree();
        tree.setBounds(
6644268165);
        shell.layout();
        
while (!shell.isDisposed())
        
{
            
if (!display.readAndDispatch())
                display.sleep();
        }

    }

}

package  net.blogjava.lzqdiy.tree;

import  java.util.List;

public   interface  ITreeEntry
{
   String getName();
   
void setName(String name);
   
void setChildren(List children);
   List getChildren();
}

package  net.blogjava.lzqdiy.tree;

import  java.util.List;

public   class  CityEntity  implements  ITreeEntry
{
    
public List getChildren()
    
{
        
// TODO Auto-generated method stub
        return null;
    }


    
public void setChildren(List children)
    
{
        
// TODO Auto-generated method stub
        
    }

   
    
private long id;

    String name;

    
public long getId()
    
{
        
return id;
    }


    
public void setId(long id)
    
{
        
this.id = id;
    }


    
public String getName()
    
{
        
return name;
    }


    
public void setName(String name)
    
{
        
this.name = name;
    }


    
public CityEntity(String name)
    
{
        
super();
        
this.name = name;
    }

}

package  net.blogjava.lzqdiy.tree;

import  java.util.List;

public   class  CountryEntity  implements  ITreeEntry
{
    
public List getChildren()
    
{
        
// TODO Auto-generated method stub
        return cities;
    }


    
public void setChildren(List children)
    
{
        
// TODO Auto-generated method stub
        this.cities=children;
    }

    
    
private Long id;

    
private String name;

    
private List cities;

    
public List getCities()
    
{
        
return cities;
    }


    
public void setCities(List cities)
    
{
        
this.cities = cities;
    }


    
public Long getId()
    
{
        
return id;
    }


    
public void setId(Long id)
    
{
        
this.id = id;
    }


    
public String getName()
    
{
        
return name;
    }


    
public void setName(String name)
    
{
        
this.name = name;
    }


    
public CountryEntity(String name)
    
{
        
super();
        
this.name = name;
    }

}

package  net.blogjava.lzqdiy.tree;

import  java.util.ArrayList;
import  java.util.List;

public   class  DataFactory
{
    
public static Object createTreeData()
    
{
        CityEntity city1 
= new CityEntity("北京");
        CityEntity city2 
= new CityEntity("上海");
        CityEntity city3 
= new CityEntity("广州");
        CountryEntity country 
= new CountryEntity("中国");
        List cities 
= new ArrayList();
        cities.add(city1);
        cities.add(city2);
        cities.add(city3);
        country.setChildren(cities);
        List list 
= new ArrayList();
        list.add(country);
        
return list;
    }

}

运行效果:
画一棵简单树的三种方法_第1张图片
如果我只需要能画出如上图所示的一棵简单树,使用TreeViewer却要写如此多的代码,实在是得不偿失。这时使我想到了使用Swing中的JTree类。
代码如下:

package  net.blogjava.lzqdiy.tree;

import  javax.swing.JFrame;
import  javax.swing.JTree;
import  javax.swing.tree.DefaultMutableTreeNode;

public   class  TreeTest2
{

    
private JTree tree;

    
private JFrame frame;

    
/** *//**
     * Launch the application
     * 
     * 
@param args
     
*/

    
public static void main(String args[])
    
{
        
try
        
{
            TreeTest2 window 
= new TreeTest2();
            window.frame.setVisible(
true);
        }
 catch (Exception e)
        
{
            e.printStackTrace();
        }

    }


    
/** *//**
     * Create the application
     
*/

    
public TreeTest2()
    
{
        initialize();
    }


    
/** *//**
     * Initialize the contents of the frame
     
*/

    
private void initialize()
    
{
        frame 
= new JFrame();
        frame.getContentPane().setLayout(
null);
        frame.setBounds(
100100400275);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        DefaultMutableTreeNode country 
= new DefaultMutableTreeNode("中国");
        DefaultMutableTreeNode city1 
= new DefaultMutableTreeNode("北京");
        DefaultMutableTreeNode city2 
= new DefaultMutableTreeNode("上海");
        DefaultMutableTreeNode city3 
= new DefaultMutableTreeNode("广州");
        country.add(city1);
        country.add(city2);
        country.add(city3);
        tree 
= new JTree(country);
        tree.setBounds(
11376222120);
        frame.getContentPane().add(tree);
    }

}

运行效果:
画一棵简单树的三种方法_第2张图片
虽然代码变少了,但是感觉用Swing画出的树又没有SWT画出的树漂亮,最终我选择了使用SWT中的Tree类来画一棵简单树。
代码如下:

package  net.blogjava.lzqdiy.tree;

import  org.eclipse.swt.SWT;
import  org.eclipse.swt.widgets.Display;
import  org.eclipse.swt.widgets.Shell;
import  org.eclipse.swt.widgets.Tree;
import  org.eclipse.swt.widgets.TreeItem;

public   class  TreeTest3
{

    
private Tree tree;

    
/** *//**
     * Launch the application
     * 
     * 
@param args
     
*/

    
public static void main(String[] args)
    
{
        
try
        
{
            TreeTest3 window 
= new TreeTest3();
            window.open();
        }
 catch (Exception e)
        
{
            e.printStackTrace();
        }

    }


    
/** *//**
     * Open the window
     
*/

    
public void open()
    
{
        
final Display display = Display.getDefault();
        
final Shell shell = new Shell();
        shell.setSize(
350250);
        shell.setText(
"SWT Application");
        
//

        shell.open();

        tree 
= new Tree(shell, SWT.BORDER);
        tree.setBounds(
6539208121);
        TreeItem country 
= new TreeItem(tree, SWT.NONE);
        country.setText(
"中国");
        TreeItem city1 
= new TreeItem(country, SWT.NULL);
        city1.setText(
"北京");
        TreeItem city2 
= new TreeItem(country, SWT.NULL);
        city2.setText(
"上海");
        TreeItem city3 
= new TreeItem(country, SWT.NULL);
        city3.setText(
"广州");
        shell.layout();
        
while (!shell.isDisposed())
        
{
            
if (!display.readAndDispatch())
                display.sleep();
        }

    }

}

运行效果:
画一棵简单树的三种方法_第3张图片

又漂亮,代码量又少,我喜欢,呵呵。

你可能感兴趣的:(画一棵简单树的三种方法)