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.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偶是不器

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值