<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    畫一棵簡單樹的三種方法

    首先我使用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;
        }

    }

    運行效果:

    如果我只需要能畫出如上圖所示的一棵簡單樹,使用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);
        }

    }

    運行效果:

    雖然代碼變少了,但是感覺用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();
            }

        }

    }

    運行效果:

    又漂亮,代碼量又少,我喜歡,呵呵。

    posted on 2007-05-11 11:33 我為J狂 閱讀(2521) 評論(4)  編輯  收藏 所屬分類: 圖形用戶界面

    評論

    # re: 畫一棵簡單樹的三種方法 2007-05-11 18:11 Pande

    Tree只能處理String的對象,TreeViewer就要高級一點,如果你的Model本身就是樹形的,用ITreeContentProvider和LabelProvider還是很爽的,尤其是當你需要實現Lazy Load時。  回復  更多評論   

    # re: 畫一棵簡單樹的三種方法 2007-05-11 18:13 Pande

    >>但是感覺用Swing畫出的樹又沒有SWT畫出的樹漂亮<<

    我舉雙手贊同  回復  更多評論   

    # re: 畫一棵簡單樹的三種方法 2007-05-11 18:50 我為J狂

    @Pande
    謝謝您的高見,使我這個菜鳥受益匪淺。  回復  更多評論   

    # re: 畫一棵簡單樹的三種方法 2007-05-11 19:59 Pande

    @我為J狂
    不敢說是高見啊,我也還是個菜鳥啊。  回復  更多評論   

    <2007年5月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    導航

    統計

    常用鏈接

    留言簿(11)

    隨筆分類(48)

    文章分類(29)

    常去逛逛

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久精品国产亚洲av麻豆图片| 99在线视频免费观看视频| 亚洲国产精品无码观看久久| 亚洲va无码专区国产乱码| 国产成人无码免费视频97| 无码免费午夜福利片在线 | 久久国产免费一区| 一级人做人a爰免费视频| 亚洲精品理论电影在线观看| 亚洲性69影院在线观看| 水蜜桃亚洲一二三四在线| 亚洲精品无码久久久久| 亚洲熟伦熟女新五十路熟妇| 国产无遮挡又黄又爽免费视频| 手机在线毛片免费播放| 999国内精品永久免费视频| 久久w5ww成w人免费| 免费国产在线视频| 成人片黄网站色大片免费观看APP| 四虎精品免费永久免费视频| 看亚洲a级一级毛片| 亚洲AV无码专区在线观看成人| 最新亚洲精品国偷自产在线| 亚洲伊人久久大香线焦| 亚洲国产日韩在线一区| 亚洲伊人久久精品| 国产成人精品日本亚洲专| 亚洲天堂男人影院| 日韩亚洲人成在线| 亚洲午夜无码久久久久小说| 亚洲欧美日韩综合俺去了| 亚洲老熟女五十路老熟女bbw| 亚洲熟妇无码AV| 亚洲av无码专区青青草原| 婷婷亚洲综合一区二区| 污网站在线免费观看| 午夜免费国产体验区免费的| 久久er国产精品免费观看8| 成人无码a级毛片免费| 免费看又黄又无码的网站| 免费视频爱爱太爽了|