B4J Code Snippet Add CSS to a ContextMenu added in code

Discussion in 'B4J Code Snippets' started by stevel05, Feb 6, 2015.

  1. stevel05

    stevel05 Expert Licensed User

    I want to record this before I forget it, so:

    A context menu created in code seems to live outside of the MainForm.Rootpane's path when it comes to the CSS. So to add it we need to add it to the MainForm.RootPanes scene.

    Code:
    Dim JO As JavaObject = MainForm.RootPane
        JO.RunMethodJO(
    "getScene",Null).RunMethodJO("getStylesheets",Null).RunMethod("add",Array(File.GetUri(File.DirAssets,"cmenu.css")))
    A working example:


    Code:
    Sub Process_Globals
        
    Private fx As JFX
        
    Private MainForm As Form
        
    Private CMenu As ContextMenu
    End Sub

    Sub AppStart (Form1 As Form, Args() As String)
        MainForm = Form1
     
        CMenu.Initialize(
    "CM")
        
    'Add the CSS file to the RootPane's Scene
        Dim JO As JavaObject = MainForm.RootPane
         JO.RunMethodJO(
    "getScene",Null).RunMethodJO("getStylesheets",Null).RunMethod("add",Array(File.GetUri(File.DirAssets,"cmenu.css")))
     
        
    'Add a style class to the context menu
        Dim CMJO As JavaObject = CMenu
        CMJO.RunMethodJO(
    "getStyleClass",Null).RunMethod("add",Array("cmenu"))
     
        
    'Add some items to the menu
        Dim Text() As String = Array As String("A","B","C")
        
    For i = 0 To Text.Length - 1
            
    Dim MItem As MenuItem
            MItem.Initialize(Text(i),
    "MI")
            CMenu.MenuItems.Add(MItem)
        
    Next
     
        MainForm.Show
    End Sub

    'Trigger the context menu from a click on the form
    Sub MainForm_MouseClicked (EventData As MouseEvent)
        
    Dim CMJO As JavaObject = CMenu
        
    Dim XOffset As Double = -MainForm.RootPane.Width + EventData.X
        
    Dim YOffset As Double = EventData.Y
        CMJO.RunMethod(
    "show",Array(MainForm.RootPane,"RIGHT",XOffset,YOffset))
     
    End Sub
    'Respond to the click
    Sub MI_Action
        
    Dim MItem As MenuItem = Sender
        
    Log(MItem.Text)
    End Sub
    And some CSS to access the cmenu class we created, in a file (cmenu.css) in the assets directory:

    Code:
    .cmenu {
        -fx-background-color: blue;
    }
    .cmenu .label {
        -fx-font-size: 20px;
        -fx-text-fill: yellow;
    }
    Now I know where to find it next time.
     
    Last edited: Feb 6, 2015
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice