B4J Code Snippet B4J - Menu

Hi,
Another way to create your own menu with an added icon and shortcut,
Based on the contents of the "MyMenu.css" file, attached to the thread.

Create Menu:
Private MenuBar1 As MenuBar

Private Sub CreateMenu
    MenuBar1.Menus.Clear
    MainForm.Stylesheets.Add(File.GetUri(File.DirAssets,"MyMenu.css"))
    
    Dim M As Menu
    M.Initialize("File","")
    Dim MI As MenuItem
    MI.Initialize("New DeployData","Menu")
    BLD_Utils.SetShortCutKey(MI,Array As String("Ctrl","N"))
    M.MenuItems.Add(MI): MI.Image = fx.LoadImageSample(File.DirAssets, "deploynew.png",24,24)
    Dim MI As MenuItem
    MI.Initialize("Load DeployData","Menu")
    BLD_Utils.SetShortCutKey(MI,Array As String("Ctrl","O"))
    M.MenuItems.Add(MI): MI.Image = fx.LoadImageSample(File.DirAssets, "deploy.png",24,24)
    Dim MI As MenuItem
    MI.Initialize("Save DeployData","Menu")
    BLD_Utils.SetShortCutKey(MI,Array As String("Ctrl","S"))
    M.MenuItems.Add(MI): MI.Image = fx.LoadImageSample(File.DirAssets, "save.png",24,24)
    Dim MI As MenuItem
    MI.Initialize("Save DeployData As","Menu")
    BLD_Utils.SetShortCutKey(MI,Array As String("Ctrl","D"))
    M.MenuItems.Add(MI): MI.Image = fx.LoadImageSample(File.DirAssets, "saveas.png",24,24)
    Dim MI As MenuItem
    M.MenuItems.Add(BuildDocCV1.MenuSeparatorItem)
    Dim MI As MenuItem
    MI.Initialize("File Locations","Menu")
    BLD_Utils.SetShortCutKey(MI,Array As String("Ctrl","L"))
    M.MenuItems.Add(MI): MI.Image = fx.LoadImageSample(File.DirAssets, "location.png",24,24)
    Dim MI As MenuItem
    M.MenuItems.Add(BuildDocCV1.MenuSeparatorItem)
    Dim MI As MenuItem
    MI.Initialize("Add Folder To Zip","Menu")
    BLD_Utils.SetShortCutKey(MI,Array As String("Ctrl","Z"))
    M.MenuItems.Add(MI): MI.Image = fx.LoadImageSample(File.DirAssets, "folder.png",24,24)
    Dim MI As MenuItem
    MI.Initialize("UnZips Files","Menu")
    BLD_Utils.SetShortCutKey(MI,Array As String("Ctrl","U"))
    M.MenuItems.Add(MI): MI.Image = fx.LoadImageSample(File.DirAssets, "unzip.png",24,24)
    Dim MI As MenuItem
    M.MenuItems.Add(BuildDocCV1.MenuSeparatorItem)
    Dim MI As MenuItem
    MI.Initialize("Exit","Menu")
    BLD_Utils.SetShortCutKey(MI,Array As String("Ctrl","X"))
    M.MenuItems.Add(MI): MI.Image = fx.LoadImageSample(File.DirAssets, "exit.png",24,24)
    
    MenuBar1.Menus.Add(M)
    
    Dim M As Menu
    M.Initialize("Options","")
    Dim CMI As CheckMenuItem
    CMI.Initialize("Logs a message","CheckMenuItem")
    CMI.Selected = True
    BLD_Utils.SetShortCutKey(CMI,Array As String("Ctrl","M"))
    M.MenuItems.Add(CMI)   

    MenuBar1.Menus.Add(M)
    
    Dim M As Menu
    M.Initialize("Help","")
    Dim MI As MenuItem
    MI.Initialize("About B4JProject","Menu")
    BLD_Utils.SetShortCutKey(MI,Array As String("F1"))
    M.MenuItems.Add(MI): MI.Image = fx.LoadImageSample(File.DirAssets, "image.png",24,24)
    
    MenuBar1.Menus.Add(M)
End Sub

'Set a shortcut key for this menu item
'Returns the menu item
Public Sub SetShortCutKey(MI As JavaObject,Combination() As String) As MenuItem
    Dim KC As JavaObject
    KC.InitializeStatic("javafx.scene.input.KeyCombination")
    Dim KCS As String
    For i = 0 To Combination.Length - 1
        If i > 0 Then KCS = KCS & "+"
        KCS = KCS & Combination(i)
    Next
    MI.RunMethod("setAccelerator",Array(KC.RunMethod("keyCombination",Array(KCS))))
    Return MI
End Sub
 

Attachments

  • CSS_MenuManager.zip
    834 bytes · Views: 376
  • ScreenShot_Menu.png
    ScreenShot_Menu.png
    78.6 KB · Views: 654

Guenter Becker

Active Member
Licensed User
Hi,
Another way to create your own menu with an added icon and shortcut,
Based on the contents of the "MyMenu.css" file, attached to the thread.

Create Menu:
Private MenuBar1 As MenuBar

Private Sub CreateMenu
    MenuBar1.Menus.Clear
    MainForm.Stylesheets.Add(File.GetUri(File.DirAssets,"MyMenu.css"))
   
    Dim M As Menu
    M.Initialize("File","")
    Dim MI As MenuItem
    MI.Initialize("New DeployData","Menu")
    BLD_Utils.SetShortCutKey(MI,Array As String("Ctrl","N"))
    M.MenuItems.Add(MI): MI.Image = fx.LoadImageSample(File.DirAssets, "deploynew.png",24,24)
    Dim MI As MenuItem
    MI.Initialize("Load DeployData","Menu")
    BLD_Utils.SetShortCutKey(MI,Array As String("Ctrl","O"))
    M.MenuItems.Add(MI): MI.Image = fx.LoadImageSample(File.DirAssets, "deploy.png",24,24)
    Dim MI As MenuItem
    MI.Initialize("Save DeployData","Menu")
    BLD_Utils.SetShortCutKey(MI,Array As String("Ctrl","S"))
    M.MenuItems.Add(MI): MI.Image = fx.LoadImageSample(File.DirAssets, "save.png",24,24)
    Dim MI As MenuItem
    MI.Initialize("Save DeployData As","Menu")
    BLD_Utils.SetShortCutKey(MI,Array As String("Ctrl","D"))
    M.MenuItems.Add(MI): MI.Image = fx.LoadImageSample(File.DirAssets, "saveas.png",24,24)
    Dim MI As MenuItem
    M.MenuItems.Add(BuildDocCV1.MenuSeparatorItem)
    Dim MI As MenuItem
    MI.Initialize("File Locations","Menu")
    BLD_Utils.SetShortCutKey(MI,Array As String("Ctrl","L"))
    M.MenuItems.Add(MI): MI.Image = fx.LoadImageSample(File.DirAssets, "location.png",24,24)
    Dim MI As MenuItem
    M.MenuItems.Add(BuildDocCV1.MenuSeparatorItem)
    Dim MI As MenuItem
    MI.Initialize("Add Folder To Zip","Menu")
    BLD_Utils.SetShortCutKey(MI,Array As String("Ctrl","Z"))
    M.MenuItems.Add(MI): MI.Image = fx.LoadImageSample(File.DirAssets, "folder.png",24,24)
    Dim MI As MenuItem
    MI.Initialize("UnZips Files","Menu")
    BLD_Utils.SetShortCutKey(MI,Array As String("Ctrl","U"))
    M.MenuItems.Add(MI): MI.Image = fx.LoadImageSample(File.DirAssets, "unzip.png",24,24)
    Dim MI As MenuItem
    M.MenuItems.Add(BuildDocCV1.MenuSeparatorItem)
    Dim MI As MenuItem
    MI.Initialize("Exit","Menu")
    BLD_Utils.SetShortCutKey(MI,Array As String("Ctrl","X"))
    M.MenuItems.Add(MI): MI.Image = fx.LoadImageSample(File.DirAssets, "exit.png",24,24)
   
    MenuBar1.Menus.Add(M)
   
    Dim M As Menu
    M.Initialize("Options","")
    Dim CMI As CheckMenuItem
    CMI.Initialize("Logs a message","CheckMenuItem")
    CMI.Selected = True
    BLD_Utils.SetShortCutKey(CMI,Array As String("Ctrl","M"))
    M.MenuItems.Add(CMI)  

    MenuBar1.Menus.Add(M)
   
    Dim M As Menu
    M.Initialize("Help","")
    Dim MI As MenuItem
    MI.Initialize("About B4JProject","Menu")
    BLD_Utils.SetShortCutKey(MI,Array As String("F1"))
    M.MenuItems.Add(MI): MI.Image = fx.LoadImageSample(File.DirAssets, "image.png",24,24)
   
    MenuBar1.Menus.Add(M)
End Sub

'Set a shortcut key for this menu item
'Returns the menu item
Public Sub SetShortCutKey(MI As JavaObject,Combination() As String) As MenuItem
    Dim KC As JavaObject
    KC.InitializeStatic("javafx.scene.input.KeyCombination")
    Dim KCS As String
    For i = 0 To Combination.Length - 1
        If i > 0 Then KCS = KCS & "+"
        KCS = KCS & Combination(i)
    Next
    MI.RunMethod("setAccelerator",Array(KC.RunMethod("keyCombination",Array(KCS))))
    Return MI
End Sub
Hello,
good solution and good job thank you. Like to use it but if I do and use your code as is there is no click event on the menus detected. Menubar1_Action is not working. Any Idea why.

Using B4J 10.3
 

LucaMs

Expert
Licensed User
Longtime User
Hello,
good solution and good job thank you. Like to use it but if I do and use your code as is there is no click event on the menus detected. Menubar1_Action is not working. Any Idea why.

Using B4J 10.3
I'm shamelessly butting in because I see @T201016 isn't online. I don't think he can answer your question; you're not providing any useful information, except for the B4J version.

I suggest you create a small sample project and attach it.
 

Guenter Becker

Active Member
Licensed User
I'm shamelessly butting in because I see @T201016 isn't online. I don't think he can answer your question; you're not providing any useful information, except for the B4J version.

I suggest you create a small sample project and attach it.
It's ok, got in contact with him. He has some trouble with English because he is a Greece. Thank you
 

T201016

Active Member
Licensed User
Longtime User
Hello, @Guenter Becker
I apologize for the lack of previous reaction, but it was at work :)
I will check why it does not work in my project (menubar1_action)
 

T201016

Active Member
Licensed User
Longtime User
It's ok, got in contact with him. He has some trouble with English because he is a Greece. Thank you
The attached example of an identical menu works for me. Please provide me with more information about the inoperative function in Menubar1_Action

Menubar1_Action does not work?
Check if you gave the correct name of the incident in MI. Initialize().

Check if you gave the correct name of the incident in Mi. Initialize (...):
    Private MenuBar1 As MenuBar

    Dim MI As MenuItem
    MI.Initialize("About B4JProject","Menu")

Private Sub Menu_Action
...
End Sub
 

Attachments

  • Sample.MyProject.zip
    167.3 KB · Views: 21
Last edited:
Top