<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狂 閱讀(2522) 評論(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)

    常去逛逛

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲日韩乱码中文字幕| 成人黄软件网18免费下载成人黄18免费视频 | 毛片基地免费观看| 18禁超污无遮挡无码免费网站| 亚洲成a人片在线观看天堂无码| 亚洲AV日韩AV鸥美在线观看| 无码专区一va亚洲v专区在线 | 亚洲国产精品VA在线看黑人 | 亚洲国产成人九九综合| 亚洲色无码专区在线观看| 国产在线19禁免费观看| 久久久久久免费视频| 91久久精品国产免费一区| 你懂的网址免费国产| 一级一级毛片免费播放| 羞羞视频免费网站入口| 亚洲人成人网站18禁| 精品亚洲AV无码一区二区三区| 亚洲综合日韩中文字幕v在线 | 久久青草免费91线频观看不卡| 七次郎成人免费线路视频| 日韩欧美亚洲国产精品字幕久久久 | 亚洲国产精品国自产拍电影| 亚洲中文字幕在线乱码| 亚洲成a人片在线观看国产| 国产一级淫片免费播放| 国产yw855.c免费视频| 国产精品国产午夜免费福利看 | 国产精品亚洲玖玖玖在线观看| 精品国产免费一区二区| 夜夜爽免费888视频| 女人18毛片特级一级免费视频| 久久WWW免费人成人片| 91在线视频免费播放| 成人毛片免费观看| 欧亚精品一区三区免费| 免费鲁丝片一级在线观看| 免费视频中文字幕| 免费一级做a爰片久久毛片潮喷| 日本黄页网站免费| 午夜亚洲av永久无码精品|