首页 > 其他 > 详细

ABAP Control Framework(9): Tree

时间:2021-05-15 20:14:59      阅读:31      评论:0      收藏:0      [点我收藏+]

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.

 

ABAP Control Framework(9): Tree

原文:https://www.cnblogs.com/tangToms/p/14772095.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!