کنترل JTree

کنترل JTree برای نمایش درختی آیتم ها به کار می رود. برای درک بهتر عملکرد این کنترل می توان به فهرست مطالب یک کتاب و یا نمایش فایل ها و یا پوشه های درون هارد اشاره کرد.

هر شاخه در این کنترل شامل یک برچسب و یک عکس اختیاری است و هر شاخه خود می تواند شامل زیر شاخه های دیگر باشد. با کلیک بر روی علامت کنار هر شاخه ، کاربر می تواند زیر شاخه های مربوطه را مشاهده کند. در شکل زیر یک کنترل JTree ساده با چند شاخه نمایش داده شده است. همانطور که مشاهده می کنید شاخه اصلی یا Root، شاخه اصلی (Root Node) است که دارای دو زیر شاخه به نام های NodeA و NodeB می باشد. NodeA نیز به نوبه خود دارای دو زیر شاخه به نام های ChildA و ChildB است :
jtree-in-java-01
برای ایجاد یک درخت در جاوا از کنترل JTree و برای ایجاد شاخه های آن از کلاس DefaultMutableTreeNode استفاده می شود. برای روشن شدن مطلب به مثال زیر توجه کنید. در مثال زیر می خواهیم همین شکل بالا را ایجاد کنیم :

   1: import javax.swing.*;
   2: import javax.swing.tree.*;
   3:
   4: public class FrameDemo
   5: {
   6:    public static void main(String[] args)
   7:    {
   8:        JFrame frame = new JFrame("JTree Demo");
   9:    
  10:       DefaultMutableTreeNode RootNode = new DefaultMutableTreeNode("Root");
  11:   
  12:       DefaultMutableTreeNode NodeA = new DefaultMutableTreeNode("NodeA");
  13:       RootNode.add(NodeA);
  14:   
  15:       DefaultMutableTreeNode NodeB = new DefaultMutableTreeNode("NodeB");
  16:       RootNode.add(NodeB);
  17:   
  18:       JTree Tree = new JTree(RootNode);
  19:   
  20:       frame.add(Tree);
  21:       frame.setSize(430 , 315);
  22:       frame.setVisible(true);
  23:    }
  24: }

همانطور که در کد بالا مشاهده می کنید ابتدا یک شاخه اصلی یا گره ریشه به نام RootNod ایجاد کرده ایم. حال می خواهیم دو زیر شخه به آن اضافه کنیم. با استفاده از کلس DefaultMutableTreeNode دو شاخه به نام های NodeA و NodeB ایجاد (خطوط 12 و 15) و این دو شاخه را با استفاده از متد ()add در خطوط 13 و 16 به شاخه اصلی اضافه می کنیم. سپس در خط 18 شاخه اصلی را به درخت و خود درخت را در خط 20 به فریم اضافه می کنیم :
jtree-in-java-02
حال فرض کنید که می خواهیم دو زیر شاخه به شاخه NodeA در شکل بالا اضافه کنیم :

DefaultMutableTreeNode ChildA = new DefaultMutableTreeNode("ChildA");
NodeA.add(ChildA);

DefaultMutableTreeNode ChildB = new DefaultMutableTreeNode("ChildB");
NodeA.add(ChildB);

همانطور که در کد بالا مشاهده می کنید ابتدا با استفاده از کلاس DefaultMutableTreeNode دو زیر شاخه ایجاد و سپس با استفاده از متد ()add آنها را به NodeA اضافه می کنیم :
jtree-in-java-03
اگر بخواهید به هر یک از شاخه های بدون زیر شاخه و شاخه هایی که دارای زیر شاخه هستند یک آیکون اختصاص دهید می توانید از DefaultTreeCellRenderer به همراه سه متد زیر استفاده کنید :

  • ()setLeafIcon : برای نمایش آیکون شاخه های بدون زیر شاخه به کار می رود.
  • ()setClosedIcon : برای نمایش آیکون شاخه های دارای زیر شاخه در حالت بسته به کار می رود.
  • ()setOpenIcon : برای نمایش آیکون شاخه های دارای زیر شاخه در حالت باز به کار می رود.

بعد از خط 18 کد ابتدای درس کدهای زیر را بنویسید :

ImageIcon leafIcon   = new ImageIcon("D:\\images\\node.png");
ImageIcon openIcon   = new ImageIcon("D:\\images\\sub.png");
ImageIcon closedIcon = new ImageIcon("D:\\images\\sum.png");

DefaultTreeCellRenderer DefaultTreeCellRenderer1 = (DefaultTreeCellRenderer) tree.getCellRenderer();
DefaultTreeCellRenderer1.setLeafIcon(leafIcon);
DefaultTreeCellRenderer1.setClosedIcon(closedIcon);
DefaultTreeCellRenderer1.setOpenIcon(openIcon);

در خطوط بالا ابتدا مسیر سه آیکون را در سه شیء از کلاس ImageIcon قرار داده ایم. سپس این سه شی را به سه متد از کلاس DefaultTreeCellRenderer ارسال کرده ایم. برنامه را اجرا کنید :

jtree-in-java-04