Altova MapForce 2025 Professional Edition

Im unten gezeigten Code sehen Sie, wie Menüeinträge erstellt werden können. Jedes MapForceCommand Objekt holt ein entsprechendes MenuItem Objekt, wobei der ActionCommand auf die ID des Befehls gesetzt wird. Die von allen Menüeinträgen generierten Aktionen werden von derselben Funktion gehandelt. Diese kann bestimmte Handlings (wie z.B Neuinterpretieren der Schließfunktion) durchführen oder die Ausführung durch Aufruf seiner exec-Methode an das MapForceControl Objekt delegieren. Das menuMap Objekt, das bei der Menüerstellung befüllt wird, wird später verwendet (siehe Abschnitt Behandlung von UI Update Events).

 

 

01

02       // Load the file menu when the button is pressed

03       btnMenu.addActionListener( new ActionListener() {

04         public void actionPerformed(ActionEvent e) {

05           try {

06             // Create the menubar that will be attached to the frame

07             MenuBar mb = new MenuBar();

08             // Load the main menu's first item - the File menu

09             MapForceCommand xmlSpyMenu = mapForceControl.getMainMenu().getSubCommands().getItem( 0 );

10             // Create Java menu items from the Commands objects

11             Menu fileMenu = new Menu();

12             handlerObject.fillMenu( fileMenu, xmlSpyMenu.getSubCommands() );

13             fileMenu.setLabel( xmlSpyMenu.getLabel().replace( "&", "" ) );

14             mb.add( fileMenu );

15             frame.setMenuBar( mb );

16             frame.validate();

17           } catch (AutomationException e1) {

18             e1.printStackTrace();

19           }

20           // Disable the button when the action has been performed

21           ((AbstractButton) e.getSource()).setEnabled( false );

22         }

23       } ) ;

24   /**

25    * Populates a menu with the commands and submenus contained in an MapForceCommands object

26    */

27   public void fillMenu(Menu newMenu, MapForceCommands mapForceMenu) throws AutomationException

28   {

29     // For each command/submenu in the mapForceMenu

30     for ( int i = 0 ; i < mapForceMenu.getCount() ; ++i  )

31     {

32       MapForceCommand mapForceCommand = mapForceMenu.getItem( i );

33       if ( mapForceCommand.getIsSeparator() )

34         newMenu.addSeparator();

35       else

36       {

37         MapForceCommands subCommands = mapForceCommand.getSubCommands();

38         // Is it a command (leaf), or a submenu?

39         if ( subCommands.isNull() || subCommands.getCount() == 0 )

40         {

41           // Command -> add it to the menu, set its ActionCommand to its ID and store in in the menuMap

42           MenuItem mi = new MenuItem( mapForceCommand.getLabel().replace( "&", "" ) );

43           mi.setActionCommand( "" + mapForceCommand.getID() );

44           mi.addActionListener( this );

45           newMenu.add( mi );

46           menuMap.put( mapForceCommand.getID(), mi );

47         }

48         else

49         {

50           // Submenu -> create submenu and repeat recursively

51           Menu newSubMenu = new Menu();

52           fillMenu( newSubMenu, subCommands );

53           newSubMenu.setLabel( mapForceCommand.getLabel().replace( "&", "" ) );

54           newMenu.add( newSubMenu );

55         }

56       }

57     }

58   }

59   /**

60    * Action handler for the menu items

61    * Called when the user selects a menu item; the item's action command corresponds to the command table for MapForce

62    */

63   public void actionPerformed( ActionEvent e )

64   {

65     try

66     {

67       int iCmd = Integer.parseInt( e.getActionCommand() );

68       // Handle explicitly the Close commands

69       switch ( iCmd )

70       {

71         case 57602:       // Close

72         case 34050:       // Close All

73           MapForceContainer.initMapForceDocument();

74           break;

75         default:

76           MapForceContainer.mapForceControl.exec( iCmd );

77           break;

78       }

79     }

80     catch ( Exception ex )

81     {

82       ex.printStackTrace();

83     }

84

85   }

© 2018-2024 Altova GmbH