zoukankan      html  css  js  c++  java
  • ABAP Control Framework(9): Tree

    9.Tree

    Simple Tree:使用cl_gui_simple_tree类创建只有单个节点Tree;

     

     List Tree:使用cl_gui_list_tree类创建每个节点有多个entry,从左到右;

     

     Column Tree:cl_gui_column_tree类自定义拥有多列的节点;

     

               示例:SAPSIMPLE_TREE_CONTROL_DEMO;

              示例:SAPTLIST_TREE_CONTROL_DEMO;

              示例:SAPCOLUMN_TREE_CONTROL_DEMO;

              示例:SAPSIMPLE_TREE_DRAG_DROP_DEMO;

           示例:RSDEMO_DRAG_DROP_TREE_MULTI;

    示例1:cl_gui_simple_tree

    CLASS c8_event_handler DEFINITION.
      PUBLIC SECTION.
        CLASS-DATA:gv_string TYPE string.
        CLASS-METHODS:m_node_double_click FOR EVENT node_double_click OF cl_gui_simple_tree
          IMPORTING node_key.
        CLASS-METHODS:m_expand_no_children FOR EVENT expand_no_children OF cl_gui_simple_tree
          IMPORTING node_key sender.
    ENDCLASS.
    CLASS c8_event_handler IMPLEMENTATION.
      METHOD:m_node_double_click.
        gv_string = 'node double click node key:' && node_key.
        MESSAGE gv_string TYPE 'I'.
      ENDMETHOD.
      METHOD:m_expand_no_children.
        DATA:lt_node TYPE TABLE OF mtreesnode.
        DATA:ls_node LIKE LINE OF lt_node.
        IF node_key = 'Item1'.
          "添加节点
          CLEAR ls_node.
          ls_node-node_key = 'New1'.
          ls_node-relatkey = 'Item1'.
          ls_node-relatship = cl_gui_column_tree=>relat_last_child.
          ls_node-n_image = '@FO@'.
          ls_node-exp_image = '@W5@'.
          ls_node-text = 'Node New1'.
          APPEND ls_node TO lt_node.
          CLEAR ls_node.
          ls_node-node_key = 'New2'.
          ls_node-relatkey = 'Item1'.
          ls_node-relatship = cl_gui_column_tree=>relat_last_child.
          ls_node-n_image = '@FO@'.
          ls_node-exp_image = '@W5@'.
          ls_node-text = 'Node New2'.
          APPEND ls_node TO lt_node.
    
          sender->add_nodes(
            EXPORTING
              node_table = lt_node
              table_structure_name = 'MTREESNODE'
          ).
        ENDIF.
        gv_string = 'expand no children node key:' && node_key.
        MESSAGE gv_string TYPE 'I'.
      ENDMETHOD.
    ENDCLASS.
    
    CLASS c8_simple_tree DEFINITION.
      PUBLIC SECTION.
        DATA:lo_simple_tree TYPE REF TO cl_gui_simple_tree.
        METHODS:m_init_tree.
        "创建节点
        METHODS:m_creat_node.
        "注册事件
        METHODS:m_regist_event.
    ENDCLASS.
    CLASS c8_simple_tree IMPLEMENTATION.
      METHOD:m_init_tree.
        "创建tree
        CREATE OBJECT lo_simple_tree
          EXPORTING
            parent = cl_gui_container=>default_screen
            node_selection_mode = cl_gui_column_tree=>node_sel_mode_single.
        "创建node
        me->m_creat_node( ).
        "注册事件
        me->m_regist_event( ).
      ENDMETHOD.
      METHOD m_creat_node.
        DATA:lt_node TYPE TABLE OF mtreesnode.
        DATA:ls_node LIKE LINE OF lt_node.
        "添加节点
        ls_node-node_key = 'Root'.
        ls_node-isfolder = 'X'.
        ls_node-n_image = '@FO@'.
        ls_node-exp_image = '@W5@'.
        ls_node-hidden = ''.
        ls_node-disabled = ''.
        ls_node-text = 'Root Node'.
        APPEND ls_node TO lt_node.
        CLEAR ls_node.
        ls_node-node_key = 'Item1'.
        ls_node-relatkey = 'Root'.
        ls_node-relatship = cl_gui_column_tree=>relat_last_child.
        ls_node-isfolder = 'X'.
        ls_node-expander = 'X'.
        ls_node-n_image = '@FO@'.
        ls_node-exp_image = '@W5@'.
        ls_node-text = 'Item1 Node'.
        APPEND ls_node TO lt_node.
    
        lo_simple_tree->add_nodes(
          EXPORTING
            node_table = lt_node
            table_structure_name = 'MTREESNODE'
        ).
      ENDMETHOD.
      METHOD m_regist_event.
        DATA:lt_events TYPE cntl_simple_events.
        DATA:ls_events TYPE cntl_simple_event.
        ls_events-eventid = cl_gui_column_tree=>eventid_node_double_click.
        ls_events-appl_event = ''.
        APPEND ls_events TO lt_events.
        ls_events-eventid = cl_gui_column_tree=>eventid_expand_no_children.
        ls_events-appl_event = ''.
        APPEND ls_events TO lt_events.
        "设置事件
        lo_simple_tree->set_registered_events(
          events = lt_events
        ).
        SET HANDLER c8_event_handler=>m_node_double_click FOR lo_simple_tree.
        SET HANDLER c8_event_handler=>m_expand_no_children FOR lo_simple_tree.
      ENDMETHOD.
    ENDCLASS.

    示例2:cl_gui_list_tree

    CLASS c8_event_handler DEFINITION.
      PUBLIC SECTION.
        CLASS-DATA:gv_string TYPE string.
        CLASS-METHODS:m_node_double_click FOR EVENT node_double_click OF cl_gui_list_tree
          IMPORTING node_key.
        CLASS-METHODS:m_header_click FOR EVENT header_click OF cl_gui_list_tree
          IMPORTING header_name.
        CLASS-METHODS:m_expand_no_children FOR EVENT expand_no_children OF cl_gui_list_tree
          IMPORTING node_key sender.
        CLASS-METHODS:m_item_double_click FOR EVENT item_double_click OF cl_gui_list_tree
          IMPORTING node_key item_name.
        CLASS-METHODS:m_button_click FOR EVENT button_click OF cl_gui_list_tree
          IMPORTING node_key item_name.
        CLASS-METHODS:m_link_click FOR EVENT link_click OF cl_gui_list_tree
          IMPORTING node_key item_name.
        CLASS-METHODS:m_checkbox_change FOR EVENT checkbox_change OF cl_gui_list_tree
          IMPORTING node_key item_name checked.
    ENDCLASS.
    CLASS c8_event_handler IMPLEMENTATION.
      METHOD:m_node_double_click.
        gv_string = 'node double click node key:' && node_key.
        MESSAGE gv_string TYPE 'I'.
      ENDMETHOD.
      METHOD:m_header_click.
        gv_string = 'header name:' && header_name.
        MESSAGE gv_string TYPE 'I'.
      ENDMETHOD.
      METHOD:m_expand_no_children.
        DATA:lt_node TYPE treev_ntab.
        DATA:ls_node TYPE treev_node.
        DATA:lt_item TYPE TABLE OF mtreeitm.
        DATA:ls_item TYPE mtreeitm.
        IF node_key = 'Item2'.
          DO 2 TIMES.
            "Item2添加New21,New22子节点
            CLEAR ls_node.
            ls_node-node_key = 'New2' && sy-index.
            ls_node-relatkey = 'Item2'.
            ls_node-relatship = cl_gui_list_tree=>relat_last_child.
            APPEND ls_node TO lt_node.
    
            "设置new2的text
            CLEAR ls_item.
            ls_item-node_key = 'New2' && sy-index.
            ls_item-item_name = sy-index.
            "item种类
            ls_item-class = cl_gui_list_tree=>item_class_text.
            "字体ITEM_FONT_DEFAULT,ITEM_FONT_FIXED,ITEM_FONT_PROP
            ls_item-font = cl_gui_list_tree=>item_font_prop.
            "align_xxx,left,auto,right,center
            ls_item-alignment = cl_gui_list_tree=>align_left.
            ls_item-t_image = '@B1@'."图标
            ls_item-length = 5. "长度
            ls_item-usebgcolor = 'X'."是否使用bgcolor
            ls_item-text = 'text' && sy-index.
            APPEND ls_item TO lt_item.
    
            "设置new2的text
            CLEAR ls_item.
            ls_item-node_key = 'New2' && sy-index.
            ls_item-item_name = sy-index + 1.
            "item种类
            ls_item-class = cl_gui_list_tree=>item_class_text.
            "align_xxx,left,auto,right,center
            ls_item-alignment = cl_gui_list_tree=>align_left.
            ls_item-t_image = '@B1@'."图标
            ls_item-length = 5. "长度
            ls_item-usebgcolor = 'X'."是否使用bgcolor
            ls_item-text = 'text' && sy-index.
            APPEND ls_item TO lt_item.
          ENDDO.
          sender->add_nodes_and_items(
          EXPORTING
            node_table = lt_node
            item_table = lt_item
            item_table_structure_name = 'MTREEITM'
        ).
        ENDIF.
        gv_string = 'expand no children node key:' && node_key.
        MESSAGE gv_string TYPE 'I'.
      ENDMETHOD.
      METHOD:m_item_double_click.
        gv_string = 'item double click node key:'
          && node_key && 'item name:' && item_name.
        MESSAGE gv_string TYPE 'I'.
      ENDMETHOD.
      METHOD:m_button_click.
        gv_string = 'butto click key:'
          && node_key && 'item name:' && item_name.
        MESSAGE gv_string TYPE 'I'.
      ENDMETHOD.
      METHOD:m_link_click.
        gv_string = 'link click node key:'
          && node_key && 'item name:' && item_name.
        MESSAGE gv_string TYPE 'I'.
      ENDMETHOD.
      METHOD:m_checkbox_change.
        gv_string = 'checkbox change node key:'
          && node_key && 'item name:' && item_name.
        MESSAGE gv_string TYPE 'I'.
      ENDMETHOD.
    ENDCLASS.
    
    CLASS c8_list_tree DEFINITION.
      PUBLIC SECTION.
        DATA:lo_list_tree TYPE REF TO cl_gui_list_tree.
        METHODS:m_init_tree.
        METHODS:m_creat_node.
        METHODS:m_regist_event.
    ENDCLASS.
    CLASS c8_list_tree IMPLEMENTATION.
      METHOD:m_init_tree.
        "创建tree
        CREATE OBJECT lo_list_tree
          EXPORTING
            parent = cl_gui_container=>default_screen
            node_selection_mode = cl_gui_column_tree=>node_sel_mode_single
            item_selection = 'X'
            with_headers = ''.
        "创建node
        me->m_creat_node( ).
        "注册事件
        me->m_regist_event( ).
      ENDMETHOD.
      METHOD m_creat_node.
        DATA:lt_node TYPE treev_ntab.
        DATA:ls_node TYPE treev_node.
        DATA:lt_item TYPE TABLE OF mtreeitm.
        DATA:ls_item TYPE mtreeitm.
        "添加根节点
        ls_node-node_key = 'Root'.
        ls_node-isfolder = 'X'.
        ls_node-n_image = '@FO@'.
        ls_node-exp_image = '@W5@'.
        ls_node-hidden = ''.
        ls_node-disabled = ''.
        APPEND ls_node TO lt_node.
        DO 2 TIMES.
          "Root添加Item1,2子节点
          CLEAR ls_node.
          ls_node-node_key = 'Item' && sy-index.
          ls_node-relatkey = 'Root'.
          ls_node-relatship = cl_gui_list_tree=>relat_last_child.
          ls_node-isfolder = 'X'.
          ls_node-expander = 'X'.
          ls_node-n_image = '@FO@'.
          ls_node-exp_image = '@W5@'.
          APPEND ls_node TO lt_node.
    
          "Item1添加New1,New2子节点
          CLEAR ls_node.
          ls_node-node_key = 'New' && sy-index.
          ls_node-relatkey = 'Item1'.
          ls_node-relatship = cl_gui_list_tree=>relat_last_child.
          APPEND ls_node TO lt_node.
        ENDDO.
    
        "设置root text
        ls_item-node_key = 'Root'.
        ls_item-item_name = '1'.
        ls_item-class = cl_gui_list_tree=>item_class_text.
        ls_item-length = 10. "长度
        ls_item-text = 'Root text'.
        APPEND ls_item TO lt_item.
        DO 2 TIMES.
          "设置Item1,2的text
          CLEAR ls_item.
          ls_item-node_key = 'Item' && sy-index.
          ls_item-item_name = '1'.
          ls_item-class = cl_gui_list_tree=>item_class_text.
          ls_item-length = 10. "长度
          ls_item-text = ls_item-node_key && ' text'.
          APPEND ls_item TO lt_item.
        ENDDO.
        DO 2 TIMES.
          "设置new1的text
          CLEAR ls_item.
          ls_item-node_key = 'New' && sy-index.
          ls_item-item_name = '1'.
          "item种类
          ls_item-class = cl_gui_list_tree=>item_class_text.
          "字体ITEM_FONT_DEFAULT,ITEM_FONT_FIXED,ITEM_FONT_PROP
          ls_item-font = cl_gui_list_tree=>item_font_prop.
          ls_item-disabled = ''."是否可用
          ls_item-editable = ''."是否可编辑
          ls_item-hidden = ''. "是否隐藏
          "align_xxx,left,auto,right,center
          ls_item-alignment = cl_gui_list_tree=>align_left.
          ls_item-t_image = '@B1@'."图标
          ls_item-chosen = ''."是否可选
          ls_item-togg_right = ''. "是否toggle
          ls_item-style = cl_gui_list_tree=>style_emphasized.
          ls_item-length = 5. "长度
          ls_item-length_pix = ''."是否使用pix
          ls_item-ignoreimag = ''. "是否忽略imag
          ls_item-usebgcolor = ''."是否使用bgcolor
          ls_item-txtisqinfo = ''. "是否text为qinfo
          ls_item-text = 'text' && sy-index.
          APPEND ls_item TO lt_item.
          "设置new1的button
          CLEAR ls_item.
          ls_item-node_key = 'New' && sy-index.
          ls_item-item_name = '2'.
          "item种类
          ls_item-class = cl_gui_list_tree=>item_class_button.
          ls_item-length = 10. "长度
          ls_item-text = 'button' && sy-index.
          APPEND ls_item TO lt_item.
          "设置new1的link
          CLEAR ls_item.
          ls_item-node_key = 'New' && sy-index.
          ls_item-item_name = '3'.
          "item种类
          ls_item-class = cl_gui_list_tree=>item_class_link.
          ls_item-length = 10. "长度
          ls_item-text = 'link' && sy-index.
          APPEND ls_item TO lt_item.
          "设置new1的link
          CLEAR ls_item.
          ls_item-node_key = 'New' && sy-index.
          ls_item-item_name = '4'.
          "item种类
          ls_item-class = cl_gui_list_tree=>item_class_checkbox.
          ls_item-length = 1. "长度
          ls_item-txtisqinfo = 'X'. "qinfo
          ls_item-editable = 'X'."是否可编辑
          ls_item-text = 'checkbox' && sy-index.
          APPEND ls_item TO lt_item.
        ENDDO.
    
        lo_list_tree->add_nodes_and_items(
          EXPORTING
            node_table = lt_node
            item_table = lt_item
            item_table_structure_name = 'MTREEITM'
        ).
    
      ENDMETHOD.
      METHOD m_regist_event.
        DATA:lt_events TYPE cntl_simple_events.
        DATA:ls_events TYPE cntl_simple_event.
        ls_events-eventid = cl_gui_column_tree=>eventid_node_double_click.
        ls_events-appl_event = ''.
        APPEND ls_events TO lt_events.
        ls_events-eventid = cl_gui_column_tree=>eventid_header_click.
        ls_events-appl_event = ''.
        APPEND ls_events TO lt_events.
        ls_events-eventid = cl_gui_column_tree=>eventid_expand_no_children.
        ls_events-appl_event = ''.
        APPEND ls_events TO lt_events.
        ls_events-eventid = cl_gui_column_tree=>eventid_item_double_click.
        ls_events-appl_event = ''.
        APPEND ls_events TO lt_events.
        ls_events-eventid = cl_gui_column_tree=>eventid_button_click.
        ls_events-appl_event = ''.
        APPEND ls_events TO lt_events.
        ls_events-eventid = cl_gui_column_tree=>eventid_link_click.
        ls_events-appl_event = ''.
        APPEND ls_events TO lt_events.
        ls_events-eventid = cl_gui_column_tree=>eventid_checkbox_change.
        ls_events-appl_event = ''.
        APPEND ls_events TO lt_events.
        "设置事件
        lo_list_tree->set_registered_events(
          events = lt_events
        ).
        SET HANDLER c8_event_handler=>m_node_double_click FOR lo_list_tree.
        SET HANDLER c8_event_handler=>m_header_click FOR lo_list_tree.
        SET HANDLER c8_event_handler=>m_expand_no_children FOR lo_list_tree.
        SET HANDLER c8_event_handler=>m_item_double_click FOR lo_list_tree.
        SET HANDLER c8_event_handler=>m_button_click FOR lo_list_tree.
        SET HANDLER c8_event_handler=>m_link_click FOR lo_list_tree.
        SET HANDLER c8_event_handler=>m_checkbox_change FOR lo_list_tree.
      ENDMETHOD.
    ENDCLASS.

    示例3:cl_gui_column_tree

    CLASS c8_event_handler DEFINITION.
      PUBLIC SECTION.
        CLASS-DATA:gv_string TYPE string.
        CLASS-METHODS:m_node_double_click FOR EVENT node_double_click OF cl_gui_column_tree
          IMPORTING node_key.
        CLASS-METHODS:m_header_click FOR EVENT header_click OF cl_gui_column_tree
          IMPORTING header_name.
        CLASS-METHODS:m_expand_no_children FOR EVENT expand_no_children OF cl_gui_column_tree
          IMPORTING node_key sender.
        CLASS-METHODS:m_item_double_click FOR EVENT item_double_click OF cl_gui_column_tree
          IMPORTING node_key item_name.
        CLASS-METHODS:m_button_click FOR EVENT button_click OF cl_gui_column_tree
          IMPORTING node_key item_name.
        CLASS-METHODS:m_link_click FOR EVENT link_click OF cl_gui_column_tree
          IMPORTING node_key item_name.
        CLASS-METHODS:m_checkbox_change FOR EVENT checkbox_change OF cl_gui_column_tree
          IMPORTING node_key item_name checked.
    ENDCLASS.
    CLASS c8_event_handler IMPLEMENTATION.
      METHOD:m_node_double_click.
        gv_string = 'node double click node key:' && node_key.
        MESSAGE gv_string TYPE 'I'.
      ENDMETHOD.
      METHOD:m_header_click.
        gv_string = 'header name:' && header_name.
        MESSAGE gv_string TYPE 'I'.
      ENDMETHOD.
      METHOD:m_expand_no_children.
        DATA:lt_node TYPE treev_ntab.
        DATA:ls_node TYPE treev_node.
        DATA:lt_item TYPE TABLE OF mtreeitm.
        DATA:ls_item TYPE mtreeitm.
        IF node_key = 'Item1'.
          "添加节点
          CLEAR ls_node.
          ls_node-node_key = 'New1'.
          ls_node-relatkey = 'Item1'.
          ls_node-relatship = cl_gui_column_tree=>relat_last_child.
          ls_node-n_image = '@FO@'.
          ls_node-exp_image = '@W5@'.
          APPEND ls_node TO lt_node.
          CLEAR ls_node.
          ls_node-node_key = 'New2'.
          ls_node-relatkey = 'Item1'.
          ls_node-relatship = cl_gui_column_tree=>relat_last_child.
          ls_node-n_image = '@FO@'.
          ls_node-exp_image = '@W5@'.
          APPEND ls_node TO lt_node.
    
          "设置column item
          ls_item-node_key = 'New1'.
          ls_item-item_name = 'Col1'.
          ls_item-class = cl_gui_column_tree=>item_class_text.
          ls_item-text = 'New1->col1'.
          APPEND ls_item TO lt_item.
          ls_item-node_key = 'New1'.
          ls_item-item_name = 'Col2'.
          ls_item-class = cl_gui_column_tree=>item_class_text.
          ls_item-text = 'New1->col2'.
          APPEND ls_item TO lt_item.
          ls_item-node_key = 'New1'.
          ls_item-item_name = 'Col3'.
          ls_item-class = cl_gui_column_tree=>item_class_text.
          ls_item-text = 'New1->col3'.
          APPEND ls_item TO lt_item.
    
          sender->add_nodes_and_items(
            EXPORTING
              node_table = lt_node
              item_table = lt_item
              item_table_structure_name = 'MTREEITM'
          ).
        ENDIF.
        gv_string = 'expand no children node key:' && node_key.
        MESSAGE gv_string TYPE 'I'.
      ENDMETHOD.
      METHOD:m_item_double_click.
        gv_string = 'item double click node key:'
          && node_key && 'item name:' && item_name.
        MESSAGE gv_string TYPE 'I'.
      ENDMETHOD.
      METHOD:m_button_click.
        gv_string = 'butto click key:'
          && node_key && 'item name:' && item_name.
        MESSAGE gv_string TYPE 'I'.
      ENDMETHOD.
      METHOD:m_link_click.
        gv_string = 'link click node key:'
          && node_key && 'item name:' && item_name.
        MESSAGE gv_string TYPE 'I'.
      ENDMETHOD.
      METHOD:m_checkbox_change.
        gv_string = 'checkbox change node key:'
          && node_key && 'item name:' && item_name.
        MESSAGE gv_string TYPE 'I'.
      ENDMETHOD.
    ENDCLASS.
    
    CLASS c8_column_tree DEFINITION.
      PUBLIC SECTION.
        DATA:lo_col_tree TYPE REF TO cl_gui_column_tree.
        DATA:ls_header TYPE treev_hhdr.
        METHODS:m_init_tree.
        METHODS:m_creat_col.
        METHODS:m_creat_node.
        METHODS:m_regist_event.
    ENDCLASS.
    CLASS c8_column_tree IMPLEMENTATION.
      METHOD:m_init_tree.
        ls_header-heading = 'heading'.
        ls_header-width = 30.
        ls_header-tooltip = 'this header'.
        ls_header-t_image = '@B1@'.
        "创建tree
        CREATE OBJECT lo_col_tree
          EXPORTING
            parent = cl_gui_container=>default_screen
            node_selection_mode = cl_gui_column_tree=>node_sel_mode_single
            item_selection = 'X'
            hierarchy_column_name = 'Col1'
            hierarchy_header = ls_header.
        "创建column
        me->m_creat_col( ).
        "创建node
        me->m_creat_node( ).
        "注册事件
        me->m_regist_event( ).
      ENDMETHOD.
      METHOD:m_creat_col.
        "添加列
        lo_col_tree->add_column(
          EXPORTING
            name = 'Col2'
            alignment = cl_gui_column_tree=>align_right
            width = 20
            header_image = '@B1@'
            header_text = 'Column2'
            header_tooltip = 'this column2'
         ).
        "插入列
        lo_col_tree->insert_column(
          EXPORTING
            name = 'Col3'
            predecessor_column = 'Col2'
            width = 20
            header_image = '@B2@'
            header_text = 'Column3'
            header_tooltip = 'this column3'
         ).
        "删除列
        "delete_column
        "更新列
        "update_column
      ENDMETHOD.
      METHOD m_creat_node.
        DATA:lt_node TYPE treev_ntab.
        DATA:ls_node TYPE treev_node.
        DATA:lt_item TYPE TABLE OF mtreeitm.
        DATA:ls_item TYPE mtreeitm.
        "添加节点
        ls_node-node_key = 'Root'.
        ls_node-isfolder = 'X'.
        ls_node-n_image = '@FO@'.
        ls_node-exp_image = '@W5@'.
        ls_node-hidden = ''.
        ls_node-disabled = ''.
        APPEND ls_node TO lt_node.
        CLEAR ls_node.
        ls_node-node_key = 'Item1'.
        ls_node-relatkey = 'Root'.
        ls_node-relatship = cl_gui_column_tree=>relat_last_child.
        ls_node-isfolder = 'X'.
        ls_node-expander = 'X'.
        ls_node-n_image = '@FO@'.
        ls_node-exp_image = '@W5@'.
        APPEND ls_node TO lt_node.
    
        "设置column item
        ls_item-node_key = 'Root'.
        ls_item-item_name = 'Col1'.
        ls_item-class = cl_gui_column_tree=>item_class_text.
        ls_item-text = 'Root->col1'.
        APPEND ls_item TO lt_item.
        ls_item-node_key = 'Root'.
        ls_item-item_name = 'Col2'.
        ls_item-class = cl_gui_column_tree=>item_class_button.
        ls_item-text = 'Root->col2'.
        APPEND ls_item TO lt_item.
        ls_item-node_key = 'Root'.
        ls_item-item_name = 'Col3'.
        ls_item-class = cl_gui_column_tree=>item_class_link.
        ls_item-text = 'Root->col3'.
        APPEND ls_item TO lt_item.
    
        ls_item-node_key = 'Item1'.
        ls_item-item_name = 'Col1'.
        ls_item-class = cl_gui_column_tree=>item_class_text.
        ls_item-text = 'Item1->col1'.
        APPEND ls_item TO lt_item.
        ls_item-node_key = 'Item1'.
        ls_item-item_name = 'Col2'.
        ls_item-class = cl_gui_column_tree=>item_class_button.
        ls_item-text = 'Item1->col2'.
        APPEND ls_item TO lt_item.
        ls_item-node_key = 'Item1'.
        ls_item-item_name = 'Col3'.
        ls_item-editable = 'X'.
        ls_item-class = cl_gui_column_tree=>item_class_checkbox.
        ls_item-text = 'Item1->col3'.
        APPEND ls_item TO lt_item.
    
        lo_col_tree->add_nodes_and_items(
          EXPORTING
            node_table = lt_node
            item_table = lt_item
            item_table_structure_name = 'MTREEITM'
        ).
    
      ENDMETHOD.
      METHOD m_regist_event.
        DATA:lt_events TYPE cntl_simple_events.
        DATA:ls_events TYPE cntl_simple_event.
        ls_events-eventid = cl_gui_column_tree=>eventid_node_double_click.
        ls_events-appl_event = ''.
        APPEND ls_events TO lt_events.
        ls_events-eventid = cl_gui_column_tree=>eventid_header_click.
        ls_events-appl_event = ''.
        APPEND ls_events TO lt_events.
        ls_events-eventid = cl_gui_column_tree=>eventid_expand_no_children.
        ls_events-appl_event = ''.
        APPEND ls_events TO lt_events.
        ls_events-eventid = cl_gui_column_tree=>eventid_item_double_click.
        ls_events-appl_event = ''.
        APPEND ls_events TO lt_events.
        ls_events-eventid = cl_gui_column_tree=>eventid_button_click.
        ls_events-appl_event = ''.
        APPEND ls_events TO lt_events.
        ls_events-eventid = cl_gui_column_tree=>eventid_link_click.
        ls_events-appl_event = ''.
        APPEND ls_events TO lt_events.
        ls_events-eventid = cl_gui_column_tree=>eventid_checkbox_change.
        ls_events-appl_event = ''.
        APPEND ls_events TO lt_events.
        "设置事件
        lo_col_tree->set_registered_events(
          events = lt_events
        ).
        SET HANDLER c8_event_handler=>m_node_double_click FOR lo_col_tree.
        SET HANDLER c8_event_handler=>m_header_click FOR lo_col_tree.
        SET HANDLER c8_event_handler=>m_expand_no_children FOR lo_col_tree.
        SET HANDLER c8_event_handler=>m_item_double_click FOR lo_col_tree.
        SET HANDLER c8_event_handler=>m_button_click FOR lo_col_tree.
        SET HANDLER c8_event_handler=>m_link_click FOR lo_col_tree.
        SET HANDLER c8_event_handler=>m_checkbox_change FOR lo_col_tree.
      ENDMETHOD.
    ENDCLASS

    示例:节点上右键菜单

    1.创建对应事件响应方法

        CLASS-METHODS:m_node_context_menu_request FOR EVENT node_context_menu_request OF cl_gui_simple_tree
          IMPORTING node_key menu.
        CLASS-METHODS:m_node_context_menu_select FOR EVENT node_context_menu_select OF cl_gui_simple_tree
          IMPORTING node_key fcode.

    2.方法实现

     "创建menu
      METHOD m_node_context_menu_request.
        DATA:lo_menu TYPE REF TO cl_ctmenu.
        CREATE OBJECT lo_menu.
        lo_menu->add_function(
          EXPORTING
            fcode = 'FUNC1'
            text = 'function 1'
            icon = '@B1@'
        ).
        lo_menu->add_function(
          EXPORTING
            fcode = 'FUNC2'
            text = 'function 2'
            icon = '@B1@'
        ).
        menu->add_function(
          EXPORTING
            fcode = 'FUNC'
            text = 'function'
            icon = '@B3@'
        ).
        menu->add_submenu(
          EXPORTING
            menu = lo_menu
            text = 'menu1'
            icon = '@B2@'
         ).
      ENDMETHOD.
      METHOD m_node_context_menu_select.
        DATA:lv_str TYPE string.
        lv_str = 'node_key:' && node_key
          && 'function:' && fcode.
        MESSAGE lv_str TYPE 'I'.
      ENDMETHOD

    3.注册事件,以及设置handler

        ls_events-eventid = cl_gui_column_tree=>eventid_node_context_menu_req.
        ls_events-appl_event = ''.
        APPEND ls_events TO lt_events.
        "设置事件
        lo_simple_tree->set_registered_events(
          events = lt_events
        ). 

    设置事件Handler

        SET HANDLER c8_event_handler=>m_node_context_menu_request FOR lo_simple_tree.
        SET HANDLER c8_event_handler=>m_node_context_menu_select FOR lo_simple_tree.
  • 相关阅读:
    吴恩达深度学习与神经网络
    吴恩达机器学习的ppt以及作业编程练习题答案(别人总结的)
    关于机器学习的小科普
    质因数分解
    FFT
    Luogu P1262 间谍网络
    关于次短路
    Luogu P1955 [NOI2015]程序自动分析
    Luogu P1041传染病控制
    Bzoj 1731 POJ 3169 Luogu P4878 Layout
  • 原文地址:https://www.cnblogs.com/tangToms/p/14772095.html
Copyright © 2011-2022 走看看