ABAP-TREE-CL_GUI_SIMPLE_TREE

本文详细介绍了一种在ABAP中实现树形控件的方法,包括创建容器、树控件,设置对齐方式,注册事件处理器,以及如何通过双击事件处理节点选择。通过实例展示了如何构建多层次的树形结构,并设置了节点的属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

*&---------------------------------------------------------------------*
*& Report  Y_ABC_12
*&
*&---------------------------------------------------------------------*
*& 屏幕100添加CONTAINER控件'CON_TREE';
*&     EXIT_0100 添加 关闭事件代码;
*&     USER_COMMAND_0100
*&---------------------------------------------------------------------*

REPORT Y_ABC_12.


CLASS LCL_APPLICATION DEFINITION DEFERRED.
DATA: G_APPLICATION TYPE REF TO LCL_APPLICATION.
DATA: GT_NODE TYPE TABLE OF MTREESNODE.

DATA: G_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      G_TREE      TYPE REF TO CL_GUI_SIMPLE_TREE.

DATA: G_UCOMM TYPE SY-UCOMM.
DATA: OK_CODE TYPE SY-UCOMM.

*----------------------------------------------------------------------*
*       CLASS lcl_application DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_APPLICATION DEFINITION.
  PUBLIC SECTION.
    METHODS:
      HANDLE_NODE_DOUBLE_CLICK
          FOR EVENT NODE_DOUBLE_CLICK OF CL_GUI_SIMPLE_TREE
          IMPORTING NODE_KEY.

ENDCLASS.                    "lcl_application DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_application IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_APPLICATION IMPLEMENTATION.
  METHOD  HANDLE_NODE_DOUBLE_CLICK.
    PERFORM FRM_NODE_DOUBLE_CLICK USING NODE_KEY.
  ENDMETHOD.                    "handle_node_double_click

ENDCLASS.                    "lcl_application IMPLEMENTATION



START-OF-SELECTION.
  CALL SCREEN 100.


*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE MODULE_STATUS_0100 OUTPUT.
  SET PF-STATUS '0100'.
*  SET TITLEBAR 'xxx'.

ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  EXIT_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE EXIT_0100 INPUT.
  SET SCREEN 0.

ENDMODULE.                 " EXIT_0100  INPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  G_UCOMM = OK_CODE.
  CASE G_UCOMM.
    WHEN 'UCOM_YES'.
      LEAVE TO SCREEN 0.
*    WHEN OTHERS.
*      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Module  MODULE_INIT_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE MODULE_INIT_0100 OUTPUT.
  PERFORM FRM_INIT_100_TREE.
ENDMODULE.                 " MODULE_INIT_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Form  FRM_INIT_100_TREE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_INIT_100_TREE .

  CHECK G_CONTAINER IS INITIAL .
  PERFORM FRM_CREATE_CONTAINER USING 'CON_TREE' G_CONTAINER.

  CHECK SY-SUBRC = 0.
  PERFORM FRM_CREATE_TREE USING G_CONTAINER G_TREE.

  CHECK SY-SUBRC = 0.
  PERFORM FRM_TREE_SET_ALIGNMENT USING 15 G_TREE.

  PERFORM FRM_ADD_TREE_EVENT USING G_TREE G_APPLICATION.
  PERFORM FRM_ADD_NODE_TABLE TABLES GT_NODE.   " 设置节点数据;
  PERFORM FRM_ADD_TREE_NODES TABLES GT_NODE USING 'MTREESNODE' G_TREE.


ENDFORM.                    " FRM_INIT_100_TREE
*&---------------------------------------------------------------------*
*&      Form  FRM_ADD_NODE_TABLE
*&---------------------------------------------------------------------*
*       设置节点表数据
*----------------------------------------------------------------------*
FORM FRM_ADD_NODE_TABLE TABLES P_GT_NODE STRUCTURE MTREESNODE.
  DATA: LS_NODE TYPE MTREESNODE.
  REFRESH P_GT_NODE.
  CLEAR LS_NODE.

  "第1层节点'
  LS_NODE-NODE_KEY = 'ROOT'.
  LS_NODE-RELATKEY = ''.
  LS_NODE-TEXT     = '分类'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.

  "第2层节点'
  LS_NODE-NODE_KEY = 'a1'.
  LS_NODE-RELATKEY = 'ROOT'.
  LS_NODE-TEXT     = '分类1'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.
  LS_NODE-NODE_KEY = 'a2'.
  LS_NODE-RELATKEY = 'ROOT'.
  LS_NODE-TEXT     = '分类2'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.

  "第3层节点'
  LS_NODE-NODE_KEY = 'b1'.
  LS_NODE-RELATKEY = 'a2'.
  LS_NODE-TEXT     = '分类3'.
  LS_NODE-ISFOLDER = 'X'.
  APPEND LS_NODE TO P_GT_NODE.

  CLEAR: LS_NODE.


ENDFORM.                    " FRM_NODE_TABLE
*&---------------------------------------------------------------------*
*&      Form  FRM_NODE_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_NODE_KEY  text
*----------------------------------------------------------------------*
FORM FRM_NODE_DOUBLE_CLICK  USING    P_NODE_KEY.
  BREAK-POINT.
ENDFORM.                    " FRM_NODE_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*&      Form  FRM_CREATE_CONTAINER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_G_CONTAINER  text
*----------------------------------------------------------------------*
FORM FRM_CREATE_CONTAINER
        USING PV_CON_TREE
              PV_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
  CREATE OBJECT PV_CONTAINER
    EXPORTING
      CONTAINER_NAME              = PV_CON_TREE   " 100屏幕CONTAINER控件
    EXCEPTIONS
      CNTL_ERROR                  = 1
      CNTL_SYSTEM_ERROR           = 2
      CREATE_ERROR                = 3
      LIFETIME_ERROR              = 4
      LIFETIME_DYNPRO_DYNPRO_LINK = 5.
ENDFORM.                    " FRM_CREATE_CONTAINER
*&---------------------------------------------------------------------*
*&      Form  FRM_CREATE_TREE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_G_CONTAINER  text
*      <--P_G_TREE  text
*----------------------------------------------------------------------*
FORM FRM_CREATE_TREE
        USING    P_G_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER
                 P_G_TREE TYPE REF TO CL_GUI_SIMPLE_TREE.

  CREATE OBJECT P_G_TREE
    EXPORTING
*     lifetime                    =
      PARENT                      = P_G_CONTAINER
*     shellstyle                  =
      NODE_SELECTION_MODE         = P_G_TREE->NODE_SEL_MODE_SINGLE
*     hide_selection              =
*     name                        =
    EXCEPTIONS
      LIFETIME_ERROR              = 1
      CNTL_SYSTEM_ERROR           = 2
      CREATE_ERROR                = 3
      FAILED                      = 4
      ILLEGAL_NODE_SELECTION_MODE = 5
      OTHERS                      = 6.

ENDFORM.                    " FRM_CREATE_TREE
*&---------------------------------------------------------------------*
*&      Form  FRM_TREE_SET_ALIGNMENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_15     text
*      <--P_G_TREE  text
*----------------------------------------------------------------------*
FORM FRM_TREE_SET_ALIGNMENT  USING P_ALIGNMENT
                                   P_G_TREE TYPE REF TO CL_GUI_SIMPLE_TREE.
  CALL METHOD P_G_TREE->SET_ALIGNMENT
    EXPORTING
      ALIGNMENT = P_ALIGNMENT. """ 不能大于15;

ENDFORM.                    " FRM_TREE_SET_ALIGNMENT
*&---------------------------------------------------------------------*
*&      Form  FRM_ADD_TREE_EVENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_G_TREE         text
*      <--P_G_APPLICATION  text
*----------------------------------------------------------------------*
FORM FRM_ADD_TREE_EVENT
        USING P_G_TREE TYPE REF TO CL_GUI_SIMPLE_TREE
              P_G_APPLICATION TYPE REF TO LCL_APPLICATION.
  DATA: LT_EVENTS TYPE CNTL_SIMPLE_EVENTS,
        LS_EVENT  TYPE CNTL_SIMPLE_EVENT.
  " node double click
  LS_EVENT-EVENTID = CL_GUI_SIMPLE_TREE=>EVENTID_NODE_DOUBLE_CLICK.
  LS_EVENT-APPL_EVENT = 'X'. " process PAI if event occurs
  APPEND LS_EVENT TO LT_EVENTS.

  CALL METHOD P_G_TREE->SET_REGISTERED_EVENTS
    EXPORTING
      EVENTS                    = LT_EVENTS
    EXCEPTIONS
      CNTL_ERROR                = 1
      CNTL_SYSTEM_ERROR         = 2
      ILLEGAL_EVENT_COMBINATION = 3.

  CHECK SY-SUBRC = 0.
  CREATE OBJECT P_G_APPLICATION.
  SET HANDLER P_G_APPLICATION->HANDLE_NODE_DOUBLE_CLICK FOR P_G_TREE.

ENDFORM.                    " FRM_ADD_TREE_EVENT
*&---------------------------------------------------------------------*
*&      Form  FRM_ADD_TREE_NODES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GT_NODE  text
*      -->PV_STRUS   text
*      <--P_G_TREE   text
*----------------------------------------------------------------------*
FORM FRM_ADD_TREE_NODES
        TABLES   P_GT_NODE STRUCTURE MTREESNODE
        USING    PV_STRUS
                 P_G_TREE TYPE REF TO CL_GUI_SIMPLE_TREE.

  CALL METHOD P_G_TREE->ADD_NODES
    EXPORTING
      TABLE_STRUCTURE_NAME           = PV_STRUS
      NODE_TABLE                     = P_GT_NODE[]
    EXCEPTIONS
      FAILED                         = 1
      ERROR_IN_NODE_TABLE            = 2
      DP_ERROR                       = 3
      TABLE_STRUCTURE_NAME_NOT_FOUND = 4
      OTHERS                         = 5.

ENDFORM.                    " FRM_ADD_TREE_NODES

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值