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.

Code:
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
    CSS_MenuManager.zip
    834 bytes · Views: 606
  • ScreenShot_Menu.png
    ScreenShot_Menu.png
    78.6 KB · Views: 1,047
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.

Code:
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
 
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.
 
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
 
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)
 
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().

Code:
    Private MenuBar1 As MenuBar

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

Private Sub Menu_Action
...
End Sub
 

Attachments

Last edited:

Similar Threads

Replies
2
Views
287
Replies
13
Views
12K
  • Locked
  • Question Question
Replies
3
Views
4K
Replies
20
Views
44K
Back
Top